<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>공부</title>
		<link rel="alternate" type="text/html" hreflang="ko" href="https://chaegeon.com/study"/>
	<link rel="self" type="application/atom+xml" href="https://chaegeon.com/study/atom"/>
	<updated>2026-11-10T22:55:11+09:00</updated>
	<id>https://chaegeon.com/study/atom</id>
	<generator>Rhymix</generator>
		<entry>
		<title>USB 장치의 속도와 트리 보기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86895"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86895#comment"/>		<id>https://chaegeon.com/study/86895</id>
		<published>2026-11-09T22:31:02+09:00</published>
		<updated>2026-11-09T22:31:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 USB 카메라가 느리면 실제 연결 속도와 같은 허브 공유 관계부터 본다. lsusb -t lsusb -t의 트리와 속도 표기를 읽는다. USB 3 장치라도 케이블과 포트, 허브 조합 때문에 낮은 속도로 연결될 수 있다. 참고: lsusb 매뉴얼</summary>
				</entry><entry>
		<title>PCIe 장치와 드라이버 연결 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86892"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86892#comment"/>		<id>https://chaegeon.com/study/86892</id>
		<published>2026-11-09T02:43:35+09:00</published>
		<updated>2026-11-09T02:43:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 PCIe 장치가 보이는지와 어떤 드라이버가 연결됐는지 구분한다. lspci -nnk -nn은 장치 ID, -k는 커널 드라이버 정보를 표시한다. 목록에 인식된 것과 원하는 드라이버가 실제로 사용 중인 것은 다른 단계다. 참고: lspci 매뉴얼</summary>
				</entry><entry>
		<title>I2C 버스 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86889"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86889#comment"/>		<id>https://chaegeon.com/study/86889</id>
		<published>2026-11-09T02:18:00+09:00</published>
		<updated>2026-11-09T02:18:00+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 장치 주소를 스캔하기 전에 시스템의 I2C 버스 목록을 읽는다. i2cdetect -l -l은 버스 목록만 보여 준다. 무조건 전체 주소를 탐색하면 민감한 장치에 영향을 줄 수 있어 이 예제는 주소 스캔을 하지 않는다. 참고: i2cdetect 매뉴얼</summary>
				</entry><entry>
		<title>GPIO 문자 장치 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86886"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86886#comment"/>		<id>https://chaegeon.com/study/86886</id>
		<published>2026-11-09T00:15:18+09:00</published>
		<updated>2026-11-09T00:15:18+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 GPIO 칩과 라인의 이름, 사용 상태를 먼저 나열한다. gpiodetect gpioinfo gpiodetect와 gpioinfo는 조회다. 헤더 핀 번호와 gpiochip 라인 번호는 같은 체계가 아니며 실제 출력 전에 pinmux와 전압을 확인한다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>CAN 인터페이스 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86883"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86883#comment"/>		<id>https://chaegeon.com/study/86883</id>
		<published>2026-11-08T12:30:48+09:00</published>
		<updated>2026-11-08T12:30:48+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CAN 장치가 등록됐는지와 현재 링크 상태를 읽는다. ip -details link show can0 can0은 실제 인터페이스 이름으로 바꾼다. 이 명령은 비트레이트를 설정하거나 버스를 올리지 않으며 물리 배선과 트랜시버, 종단 저항은 별도 확인 대상이다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>CUDA에 넘길 NumPy 버퍼 연속성 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86880"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86880#comment"/>		<id>https://chaegeon.com/study/86880</id>
		<published>2026-11-08T12:14:46+09:00</published>
		<updated>2026-11-08T12:14:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 전치한 NumPy 배열을 CUDA 인터페이스에 넘기기 전에 연속 메모리인지 읽는다. import numpy as np x = np.arange(12).reshape(3, 4).T y = np.ascontiguousarray(x) print(x.flags.c_contiguous, y.flags.c_contiguous) 전치 view와 ascontiguousarray() 결과의 flags를 비교한다. shape가 같거나 원소가 같아도 메모리 배치가 같다는 뜻은 아니다. Python 코드를 example.py로 저장해 python3 example.py로 실행한다. ...</summary>
				</entry><entry>
		<title>NCHW와 NHWC 차원 순서 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86877"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86877#comment"/>		<id>https://chaegeon.com/study/86877</id>
		<published>2026-11-08T11:10:32+09:00</published>
		<updated>2026-11-08T11:10:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 같은 숫자 배열도 채널 축을 어디에 두는지에 따라 해석이 달라진다. import numpy as np x = np.zeros((1, 3, 224, 224), dtype=np.float32) y = x.transpose(0, 2, 3, 1) print(x.shape, y.shape) (1,3,224,224)를 (1,224,224,3)으로 전치한다. reshape로 모양만 바꾸는 것과 데이터 축을 교환하는 것은 다르다. Python 코드를 example.py로 저장해 python3 example.py로 실행한다. import하는 모듈과 예제에 지정한 ...</summary>
				</entry><entry>
		<title>FP16 추론 결과를 원본과 비교하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86874"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86874#comment"/>		<id>https://chaegeon.com/study/86874</id>
		<published>2026-11-08T09:30:46+09:00</published>
		<updated>2026-11-08T09:30:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 FP16 결과가 원본과 얼마나 다른지 작은 지표부터 비교한다. import numpy as np a = np.load(&#039;reference.npy&#039;) b = np.load(&#039;fp16.npy&#039;) if a.shape != b.shape: raise ValueError(&quot;입력 결과 배열의 shape가 다릅니다&quot;) print(np.max(np.abs(a - b))) 같은 입력에서 얻은 reference.npy와 fp16.npy를 준비한다. 최대 절대 오차 외에 결과 형태와 업무 지표도 맞춰 검증한다. Python 코드를 example.py로 저장해 python...</summary>
				</entry><entry>
		<title>ONNX 모델의 구조 검사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86871"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86871#comment"/>		<id>https://chaegeon.com/study/86871</id>
		<published>2026-11-07T22:48:36+09:00</published>
		<updated>2026-11-07T22:48:36+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 모델 파일 구조가 유효한 ONNX인지 먼저 검사한다. import onnx m = onnx.load(&#039;model.onnx&#039;) onnx.checker.check_model(m) print(&#039;OK&#039;) 오류 없이 통과하면 OK가 나온다. 이 성공이 곧 TensorRT의 모든 연산 지원이나 원하는 추론 정확도까지 보장하지는 않는다. Python 코드를 example.py로 저장해 python3 example.py로 실행한다. import하는 모듈과 예제에 지정한 입력 파일이 준비돼 있어야 한다. 참고: ONNX checker</summary>
				</entry><entry>
		<title>ONNX 입력 이름과 차원 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86868"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86868#comment"/>		<id>https://chaegeon.com/study/86868</id>
		<published>2026-11-07T21:25:11+09:00</published>
		<updated>2026-11-07T21:25:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 TensorRT 엔진을 만들기 전에 ONNX 입력 이름과 형태를 확인한다. import onnx m = onnx.load(&#039;model.onnx&#039;) print([(i.name, str(i.type)) for i in m.graph.input]) model.onnx는 준비한 모델 파일이다. 동적 차원이 있으면 최소 입력 크기와 최적 입력 크기, 최대 입력 크기를 최적화 프로필로 지정할 필요가 있다. Python 코드를 example.py로 저장해 python3 example.py로 실행한다. import하는 모듈과 예제에 지정...</summary>
				</entry><entry>
		<title>Python TensorRT 버전 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86865"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86865#comment"/>		<id>https://chaegeon.com/study/86865</id>
		<published>2026-11-07T20:46:30+09:00</published>
		<updated>2026-11-07T20:46:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 Python에서 실제 가져오는 TensorRT 모듈 버전을 읽는다. import tensorrt as trt print(trt.__version__) trt.__version__을 출력한다. 다른 Python 환경이나 가상환경에서는 다른 패키지를 읽을 수 있어 실행 인터프리터도 함께 구분한다. Python 코드를 example.py로 저장해 python3 example.py로 실행한다. import하는 모듈과 예제에 지정한 입력 파일이 준비돼 있어야 한다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>설치된 TensorRT 실행 옵션 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86862"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86862#comment"/>		<id>https://chaegeon.com/study/86862</id>
		<published>2026-11-07T09:34:33+09:00</published>
		<updated>2026-11-07T09:34:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 TensorRT 명령줄 예제가 버전 때문에 실패하면 설치된 trtexec의 옵션부터 읽는다. /usr/src/tensorrt/bin/trtexec --help 예제 경로는 Jetson 패키지의 일반적인 위치다. 파일이 없다면 설치 경로를 먼저 찾고 예전 버전 옵션을 억지로 추가하지 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>영상 파이프라인 처리 프레임률 보기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86859"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86859#comment"/>		<id>https://chaegeon.com/study/86859</id>
		<published>2026-11-06T20:13:14+09:00</published>
		<updated>2026-11-06T20:13:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 실제 카메라 연결 전에 테스트 영상으로 파이프라인 처리 흐름을 본다. gst-launch-1.0 videotestsrc num-buffers=120 ! fpsdisplaysink video-sink=fakesink text-overlay=false sync=false 120개 테스트 버퍼를 화면 표시 없이 처리한다. sync=false 결과는 실시간 카메라 FPS 보장이 아니라 이 테스트 경로의 처리 속도다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>H264 인코더 지원 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86856"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86856#comment"/>		<id>https://chaegeon.com/study/86856</id>
		<published>2026-11-06T08:06:50+09:00</published>
		<updated>2026-11-06T08:06:50+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 보드에 H.264 하드웨어 인코딩 경로가 제공되는지 확인한다. gst-inspect-1.0 nvv4l2h264enc nvv4l2h264enc가 없으면 패키지뿐 아니라 보드 기능도 본다. Orin Nano처럼 해당 하드웨어 인코더가 없는 제품에 같은 파이프라인을 기대하면 안 된다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>하드웨어 디코더 속성 보기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86853"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86853#comment"/>		<id>https://chaegeon.com/study/86853</id>
		<published>2026-11-06T07:45:42+09:00</published>
		<updated>2026-11-06T07:45:42+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 하드웨어 디코더에 어떤 압축 비트스트림을 넣을 수 있는지 읽는다. gst-inspect-1.0 nvv4l2decoder nvv4l2decoder의 sink caps와 속성을 본다. 파서가 필요한 입력인지, 출력 메모리 유형이 무엇인지까지 함께 맞춘다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>하드웨어 영상 변환기 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86850"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86850#comment"/>		<id>https://chaegeon.com/study/86850</id>
		<published>2026-11-06T07:29:20+09:00</published>
		<updated>2026-11-06T07:29:20+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 영상 크기와 색 형식을 바꿀 때 Jetson 변환기의 지원 범위를 읽는다. gst-inspect-1.0 nvvidconv nvvidconv의 입력 caps와 출력 caps, 속성 목록을 본다. 모든 포맷 조합이 하드웨어 한 단계 변환으로 가능한 것은 아니다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>NVMM 버퍼를 사용하는 파이프라인 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86847"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86847#comment"/>		<id>https://chaegeon.com/study/86847</id>
		<published>2026-11-06T06:54:17+09:00</published>
		<updated>2026-11-06T06:54:17+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 Jetson 영상 파이프라인의 NVMM 버퍼 경로를 읽는 첫 단계다. gst-inspect-1.0 nvarguscamerasrc nvarguscamerasrc의 출력 caps에서 memory:NVMM을 찾는다. 일반 CPU 배열과 같은 버퍼라고 생각하고 포인터를 처리하지 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>GStreamer 플러그인 기능 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86844"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86844#comment"/>		<id>https://chaegeon.com/study/86844</id>
		<published>2026-11-05T23:36:24+09:00</published>
		<updated>2026-11-05T23:36:24+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 인터넷 예제를 붙이기 전에 현재 nvvidconv가 받는 형식과 옵션을 읽는다. gst-inspect-1.0 nvvidconv sink/src pad의 caps와 Element Properties를 나눠 본다. 입출력 메모리 유형까지 맞아야 파이프라인이 연결된다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>카메라가 제공하는 해상도와 포맷 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86841"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86841#comment"/>		<id>https://chaegeon.com/study/86841</id>
		<published>2026-11-05T21:58:28+09:00</published>
		<updated>2026-11-05T21:58:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 카메라가 실제 지원하는 해상도와 프레임률 조합을 먼저 읽는다. v4l2-ctl -d /dev/video0 --list-formats-ext /dev/video0은 실제 장치 번호로 바꾼다. 목록에 없는 조합을 GStreamer caps에 쓰면 협상부터 실패할 수 있다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>카메라 장치 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86838"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86838#comment"/>		<id>https://chaegeon.com/study/86838</id>
		<published>2026-11-05T21:30:30+09:00</published>
		<updated>2026-11-05T21:30:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 현재 영상 장치가 어떤 /dev/video 번호로 등록됐는지 읽는다. v4l2-ctl --list-devices 장치 그룹 이름과 video 노드를 같이 본다. CSI와 USB 카메라가 같은 프로그램 경로를 사용한다고 가정하지 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>카메라 데몬의 상태와 로그 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86835"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86835#comment"/>		<id>https://chaegeon.com/study/86835</id>
		<published>2026-11-05T21:06:15+09:00</published>
		<updated>2026-11-05T21:06:15+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CSI 카메라가 안 열리면 센서 인식과 Argus 서비스 문제를 나눠 본다. systemctl status nvargus-daemon --no-pager journalctl -u nvargus-daemon -n 30 --no-pager status는 현재 상태, journalctl은 최근 30개 로그다. 단순 재시작에 앞서 오류 시각과 메시지를 남겨 두면 원인을 좁히기 좋다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>팬 제어 서비스 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86832"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86832#comment"/>		<id>https://chaegeon.com/study/86832</id>
		<published>2026-11-05T01:28:11+09:00</published>
		<updated>2026-11-05T01:28:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 장시간 처리 중 열로 성능이 흔들리면 팬 제어 서비스부터 읽어 볼 수 있다. systemctl status nvfancontrol --no-pager nvfancontrol의 active 상태와 최근 오류를 본다. 서비스 활성 표시만으로 팬 배선과 회전 상태, 방열판 상태까지 정상이라고 판단하지 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>cudaMallocManaged() :: 통합 메모리 사용하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/82673"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/82673#comment"/>		<id>https://chaegeon.com/study/82673</id>
		<published>2026-11-04T07:53:32+09:00</published>
		<updated>2026-11-04T07:53:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 cudaMallocManaged()는 CPU와 GPU가 같은 포인터로 접근할 수 있는 CUDA 통합 메모리를 할당한다. Jetson은 CPU와 GPU가 물리 메모리를 공유하지만 동기화가 사라지는 것은 아니다. 형태는 cudaError_t cudaMallocManaged(void **devPtr, size_t size, unsigned int flags) 이다. 할당한 포인터를 CPU 코드와 CUDA 커널에서 모두 사용하고 cudaFree()로 해제한다. 커널이 끝나기 전에 CPU가 결과를 읽으려면 반드시 스트...</summary>
				</entry><entry>
		<title>지원하는 nvpmodel 프로필 읽기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86829"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86829#comment"/>		<id>https://chaegeon.com/study/86829</id>
		<published>2026-11-04T02:11:35+09:00</published>
		<updated>2026-11-04T02:11:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 nvpmodel의 모드 번호를 바꾸기 전에 현재 장치의 프로필을 읽는다. sudo nvpmodel -q --verbose -q --verbose는 조회다. 다른 보드의 모드 0을 가져와 같은 전력이라고 생각하지 말고 출력 이름과 제한값을 함께 본다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>thermal zone 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86826"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86826#comment"/>		<id>https://chaegeon.com/study/86826</id>
		<published>2026-11-04T01:14:29+09:00</published>
		<updated>2026-11-04T01:14:29+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 온도 때문에 성능이 떨어지는지 보기 전에 어떤 센서의 온도를 읽는지부터 구분한다. for z in /sys/class/thermal/thermal_zone*; do printf &#039;%s &#039; &quot;$z&quot; cat &quot;$z/type&quot; &quot;$z/temp&quot; done 각 thermal_zone의 type과 temp를 함께 출력한다. 값이 45000이면 보통 45도지만 단위는 해당 인터페이스 정의를 따른다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>스왑 사용 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86823"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86823#comment"/>		<id>https://chaegeon.com/study/86823</id>
		<published>2026-11-04T00:49:02+09:00</published>
		<updated>2026-11-04T00:49:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 메모리 부족을 볼 때 RAM과 스왑을 나누어 읽는다. swapon --show free -h swapon은 활성 스왑 장치와 파일, free는 메모리 요약이다. 스왑 용량이 GPU의 빠른 작업 메모리 용량을 그대로 늘려 주지는 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>커널과 모듈 버전 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86820"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86820#comment"/>		<id>https://chaegeon.com/study/86820</id>
		<published>2026-11-04T00:24:59+09:00</published>
		<updated>2026-11-04T00:24:59+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 외부 모듈을 올리기 전에 실행 중 커널과 설치된 모듈 디렉터리를 맞춰 본다. uname -r ls /lib/modules uname -r 결과에 대응하는 /lib/modules 경로가 있는지 읽는다. 폴더가 있다고 개별 모듈의 ABI까지 무조건 호환되는 것은 아니다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>설치된 NVIDIA 패키지 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86817"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86817#comment"/>		<id>https://chaegeon.com/study/86817</id>
		<published>2026-11-03T22:22:06+09:00</published>
		<updated>2026-11-03T22:22:06+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 드라이버와 멀티미디어 문제가 생기면 설치된 L4T 패키지 조합을 읽는다. dpkg-query -W &#039;nvidia-l4t-*&#039; 인용한 nvidia-l4t-*는 dpkg-query가 패키지 이름 패턴으로 해석한다. 셸이 현재 디렉터리 파일로 먼저 확장하게 두지 않는다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>CUDA 도구의 실제 경로 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86814"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86814#comment"/>		<id>https://chaegeon.com/study/86814</id>
		<published>2026-11-03T22:02:14+09:00</published>
		<updated>2026-11-03T22:02:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA가 여러 버전 설치됐을 때 실제로 어느 nvcc와 라이브러리 경로를 쓰는지 확인한다. command -v nvcc readlink -f /usr/local/cuda command -v는 실행될 nvcc, readlink -f는 /usr/local/cuda 링크의 최종 대상을 보여 준다. 둘이 다른 버전을 가리키면 빌드 설정부터 정리한다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>실제 Jetson 보드 모델 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86811"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86811#comment"/>		<id>https://chaegeon.com/study/86811</id>
		<published>2026-11-03T21:07:17+09:00</published>
		<updated>2026-11-03T21:07:17+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 지금 프로그램이 올라간 Jetson 모델을 시스템이 어떻게 식별하는지 읽는다. tr -d &#039;\0&#039; &lt;/proc/device-tree/model device-tree의 model에는 널 문자가 들어 있어 tr로 제거한다. 모듈 모델과 별도 캐리어 보드 호환성은 같은 정보가 아니다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>JetPack과 Jetson Linux 버전 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86808"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86808#comment"/>		<id>https://chaegeon.com/study/86808</id>
		<published>2026-11-03T20:27:49+09:00</published>
		<updated>2026-11-03T20:27:49+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 JetPack 예제가 안 맞을 때는 보드 이름보다 설치된 Jetson Linux 버전부터 구분한다. cat /etc/nv_tegra_release dpkg-query -W nvidia-l4t-core nv_tegra_release에서 L4T 릴리스를, dpkg-query에서 core 패키지 버전을 본다. 같은 이름의 보드도 설치 이미지가 다를 수 있다. 참고: Jetson Linux R36 개발 가이드</summary>
				</entry><entry>
		<title>cudaDeviceReset() :: 현재 CUDA 장치의 컨텍스트 자원 초기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86805"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86805#comment"/>		<id>https://chaegeon.com/study/86805</id>
		<published>2026-11-03T19:07:57+09:00</published>
		<updated>2026-11-03T19:07:57+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 현재 장치와 관련된 프로세스의 CUDA 상태와 자원을 초기화한다. 가벼운 오류 초기화 함수가 아니다. 같은 프로세스의 다른 작업이 쓰는 자원도 무효가 될 수 있어 예제는 독립 프로그램의 마지막에 둔다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErro...</summary>
				</entry><entry>
		<title>cudaGraphExecDestroy() :: 실행 가능한 CUDA 그래프 인스턴스 정리하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86802"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86802#comment"/>		<id>https://chaegeon.com/study/86802</id>
		<published>2026-11-01T21:56:46+09:00</published>
		<updated>2026-11-01T21:56:46+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 실행 가능한 CUDA 그래프 인스턴스를 정리한다. 그래프 정의와 별도로 만든 실행 인스턴스를 먼저 정리한다. 예제는 빈 그래프를 사용하며 실제 커널을 실행하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1...</summary>
				</entry><entry>
		<title>cudaGraphDestroy() :: CUDA 그래프 정의 객체 해제하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86799"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86799#comment"/>		<id>https://chaegeon.com/study/86799</id>
		<published>2026-11-01T21:22:15+09:00</published>
		<updated>2026-11-01T21:22:15+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA 그래프 정의 객체를 정리한다. 실행 인스턴스와 정의 객체는 서로 다른 핸들이다. 예제는 빈 그래프를 생성하고 정리하는 흐름만 보여 준다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while (0) i...</summary>
				</entry><entry>
		<title>cudaGraphCreate() :: 빈 CUDA 실행 그래프 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86796"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86796#comment"/>		<id>https://chaegeon.com/study/86796</id>
		<published>2026-11-01T20:40:39+09:00</published>
		<updated>2026-11-01T20:40:39+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA 그래프 정의를 담을 빈 객체를 만든다. 객체 생성만으로 GPU 연산이 실행되지 않는다. 노드와 의존성을 추가하고 실행 인스턴스를 준비하는 단계가 별도로 있다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); ...</summary>
				</entry><entry>
		<title>cudaStreamIsCapturing() :: 스트림 그래프 캡처 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86793"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86793#comment"/>		<id>https://chaegeon.com/study/86793</id>
		<published>2026-11-01T19:06:28+09:00</published>
		<updated>2026-11-01T19:06:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 스트림이 CUDA 그래프 캡처 중인지 조회한다. 예제는 새 스트림의 상태를 읽는다. 그래프 캡처를 시작하는 함수가 아니며 반환된 status를 읽어 후속 호출 허용 여부를 판단한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); ...</summary>
				</entry><entry>
		<title>cudaMemsetAsync() :: 메모리 초기화를 스트림에 제출하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86790"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86790#comment"/>		<id>https://chaegeon.com/study/86790</id>
		<published>2026-11-01T09:30:08+09:00</published>
		<updated>2026-11-01T09:30:08+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 스트림에 디바이스 버퍼 초기화 작업을 넣는다. 예제는 4096바이트를 0으로 만들고 완료를 기다린 뒤 해제한다. CPU에서 제출 직후 완료됐다고 판단하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaHostUnregister() :: 기존 버퍼의 CUDA 등록 해제하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86787"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86787#comment"/>		<id>https://chaegeon.com/study/86787</id>
		<published>2026-10-31T16:56:03+09:00</published>
		<updated>2026-10-31T16:56:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 기존 호스트 버퍼의 CUDA 등록을 해제한다. 등록 해제가 원래 malloc 계열 버퍼를 free()하는 것은 아니다. 작업 완료 후 등록 해제, 원래 메모리 해제 순서를 맞춘다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1);...</summary>
				</entry><entry>
		<title>cudaHostRegister() :: 기존 호스트 버퍼를 페이지 잠금으로 등록하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86784"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86784#comment"/>		<id>https://chaegeon.com/study/86784</id>
		<published>2026-10-31T15:27:31+09:00</published>
		<updated>2026-10-31T15:27:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이미 확보한 CPU 버퍼를 CUDA가 사용할 페이지 잠금 영역으로 등록한다. 원래 메모리를 할당하는 동작과 별개다. Jetson의 플랫폼별 지원 조건이 있어 모든 보드에서 된다고 가정하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda...</summary>
				</entry><entry>
		<title>cudaFuncGetAttributes() :: 커널의 레지스터와 공유 메모리 속성 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86781"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86781#comment"/>		<id>https://chaegeon.com/study/86781</id>
		<published>2026-10-31T13:52:16+09:00</published>
		<updated>2026-10-31T13:52:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 컴파일된 커널의 레지스터 사용 등 속성을 읽는다. 빈 커널의 numRegs를 출력한다. GPU 아키텍처와 컴파일 옵션이 다르면 같은 소스에서도 값이 달라질 수 있다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaOccupancyMaxPotentialBlockSize() :: 커널 실행 블록 크기 후보 얻기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86778"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86778#comment"/>		<id>https://chaegeon.com/study/86778</id>
		<published>2026-10-30T23:36:21+09:00</published>
		<updated>2026-10-30T23:36:21+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 커널 자원 조건으로 실행 블록 크기의 후보를 얻는다. 예제 커널은 빈 함수라 호출 구조 확인용이다. 출력 후보만으로 실제 알고리즘의 최적 처리량을 보장할 수는 없다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1...</summary>
				</entry><entry>
		<title>cudaDeviceSetLimit() :: CUDA 장치 런타임 제한 설정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86775"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86775#comment"/>		<id>https://chaegeon.com/study/86775</id>
		<published>2026-10-30T23:03:29+09:00</published>
		<updated>2026-10-30T23:03:29+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 디바이스 런타임의 특정 제한값을 요청한다. 예제는 스택 크기 설정이다. 모든 장치와 제한 종류가 임의 값 변경을 지원하지 않으므로 반환 오류를 처리한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } ...</summary>
				</entry><entry>
		<title>cudaDeviceGetLimit() :: CUDA 런타임의 장치 제한 값 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86772"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86772#comment"/>		<id>https://chaegeon.com/study/86772</id>
		<published>2026-10-30T22:38:34+09:00</published>
		<updated>2026-10-30T22:38:34+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 디바이스 실행에 사용하는 특정 제한값을 읽는다. 예제는 디바이스 스택 크기를 바이트로 읽는다. GPU 총 메모리나 블록당 스레드 수를 읽는 함수와 다르다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } w...</summary>
				</entry><entry>
		<title>cudaMemset2D() :: 피치를 가진 2차원 메모리 초기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86769"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86769#comment"/>		<id>https://chaegeon.com/study/86769</id>
		<published>2026-10-30T22:02:35+09:00</published>
		<updated>2026-10-30T22:02:35+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 행 간격이 있는 2차원 메모리를 바이트 값으로 채운다. 한 행의 유효 width와 실제 pitch를 분리해 넘긴다. pitch 전체를 영상 가로 픽셀 수라고 해석하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ }...</summary>
				</entry><entry>
		<title>cudaMallocPitch() :: 행 정렬을 고려한 2차원 디바이스 메모리 할당하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86766"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86766#comment"/>		<id>https://chaegeon.com/study/86766</id>
		<published>2026-10-30T19:48:00+09:00</published>
		<updated>2026-10-30T19:48:00+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 행 정렬을 고려한 2차원 디바이스 메모리를 확보한다. width는 바이트, height는 행 수다. pitch도 바이트 단위이며 요청한 width보다 클 수 있어 다음 행 주소에 pitch를 사용한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)...</summary>
				</entry><entry>
		<title>cudaStreamWaitEvent() :: 스트림 사이 의존성 설정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86763"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86763#comment"/>		<id>https://chaegeon.com/study/86763</id>
		<published>2026-10-29T22:31:52+09:00</published>
		<updated>2026-10-29T22:31:52+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 한 스트림의 후속 작업이 다른 이벤트 완료 뒤 진행되게 한다. CPU를 멈추는 대기와 달리 GPU 작업 순서에 의존성을 추가한다. 이벤트를 어디 스트림에 기록했는지가 관계있다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ ...</summary>
				</entry><entry>
		<title>cudaEventElapsedTime() :: 두 GPU 이벤트 사이 시간 측정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86760"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86760#comment"/>		<id>https://chaegeon.com/study/86760</id>
		<published>2026-10-29T01:38:54+09:00</published>
		<updated>2026-10-29T01:38:54+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 두 이벤트 기록 사이의 GPU 시간 차이를 밀리초로 얻는다. 아래는 측정 호출 순서를 보이는 예제다. 두 기록 사이에 실제 커널 실행이나 복사를 넣지 않아 나온 숫자를 어떤 작업의 성능으로 해석하면 안 된다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGe...</summary>
				</entry><entry>
		<title>cudaEventDestroy() :: CUDA 이벤트 핸들 해제하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86757"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86757#comment"/>		<id>https://chaegeon.com/study/86757</id>
		<published>2026-10-28T23:50:07+09:00</published>
		<updated>2026-10-28T23:50:07+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 사용이 끝난 이벤트 객체를 정리한다. 핸들을 다시 기록하거나 조회하지 않는다. 이벤트가 나타내는 작업에서 사용하는 메모리 수명은 별도로 관리한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while...</summary>
				</entry><entry>
		<title>cudaEventQuery() :: 이벤트 완료 여부를 비동기로 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86754"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86754#comment"/>		<id>https://chaegeon.com/study/86754</id>
		<published>2026-10-28T23:26:32+09:00</published>
		<updated>2026-10-28T23:26:32+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이벤트 완료 여부를 기다리지 않고 확인한다. 기록 직후에는 NotReady일 수 있고 빠르게 완료됐다면 Success일 수도 있다. 어느 한 결과를 고정 정답으로 삼지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1);...</summary>
				</entry><entry>
		<title>cudaEventSynchronize() :: 이벤트 완료까지 호스트 기다리기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86751"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86751#comment"/>		<id>https://chaegeon.com/study/86751</id>
		<published>2026-10-28T23:16:05+09:00</published>
		<updated>2026-10-28T23:16:05+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 지정한 이벤트가 완료될 때까지 호스트가 기다린다. 이벤트 이전 작업의 완료 경계를 잡는다. 장치 전체를 기다리는 DeviceSynchronize보다 좁은 범위의 대기다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaEventRecord() :: 현재 스트림 위치에 이벤트 기록하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86748"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86748#comment"/>		<id>https://chaegeon.com/study/86748</id>
		<published>2026-10-28T22:47:16+09:00</published>
		<updated>2026-10-28T22:47:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이벤트를 스트림의 현재 작업 순서에 기록한다. 호스트 함수가 돌아오는 시점과 GPU가 그 이벤트 위치에 도달하는 시점은 다르다. 예제는 Synchronize로 기록 완료를 기다린다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ ...</summary>
				</entry><entry>
		<title>cudaEventCreateWithFlags() :: 옵션을 지정해 CUDA 이벤트 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86745"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86745#comment"/>		<id>https://chaegeon.com/study/86745</id>
		<published>2026-10-28T19:31:37+09:00</published>
		<updated>2026-10-28T19:31:37+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이벤트 옵션을 지정해 객체를 만든다. 예제의 DisableTiming은 시간 측정 없이 의존성 표시 등에 쓰는 이벤트다. 이후 ElapsedTime으로 재는 이벤트와 구분한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaEventCreate() :: CUDA 이벤트 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86742"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86742#comment"/>		<id>https://chaegeon.com/study/86742</id>
		<published>2026-10-27T20:47:21+09:00</published>
		<updated>2026-10-27T20:47:21+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 GPU 작업 경계를 기록할 이벤트 객체를 만든다. 생성만으로 시각이 기록되지는 않는다. 기록에는 cudaEventRecord(), 해제에는 cudaEventDestroy()를 사용한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ ...</summary>
				</entry><entry>
		<title>cudaStreamGetPriority() :: CUDA 스트림 우선순위 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86739"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86739#comment"/>		<id>https://chaegeon.com/study/86739</id>
		<published>2026-10-27T08:44:02+09:00</published>
		<updated>2026-10-27T08:44:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 스트림에 설정된 우선순위를 읽는다. 반환 우선순위는 작업의 실시간 실행 기한을 뜻하지 않는다. 예제는 기본 생성 스트림의 값을 조회한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while (0) int m...</summary>
				</entry><entry>
		<title>cudaStreamGetFlags() :: CUDA 스트림 생성 플래그 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86736"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86736#comment"/>		<id>https://chaegeon.com/study/86736</id>
		<published>2026-10-27T08:32:58+09:00</published>
		<updated>2026-10-27T08:32:58+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 만들어진 스트림의 플래그를 읽는다. 생성할 때 설정한 동작을 나중에 확인할 수 있다. 스트림이 지금 실행 중인지 여부를 읽는 함수는 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while (0) int...</summary>
				</entry><entry>
		<title>cudaStreamQuery() :: 스트림 완료 여부를 기다림 없이 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86733"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86733#comment"/>		<id>https://chaegeon.com/study/86733</id>
		<published>2026-10-27T07:56:19+09:00</published>
		<updated>2026-10-27T07:56:19+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 특정 스트림이 완료됐는지 호스트를 기다리게 하지 않고 묻는다. cudaErrorNotReady는 진행 중이라는 상태다. 예제처럼 제출 작업이 없는 스트림과 긴 작업이 들어 있는 스트림의 결과는 다를 수 있다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorSt...</summary>
				</entry><entry>
		<title>cudaStreamSynchronize() :: 특정 스트림의 작업 완료 기다리기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86730"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86730#comment"/>		<id>https://chaegeon.com/study/86730</id>
		<published>2026-10-27T06:21:03+09:00</published>
		<updated>2026-10-27T06:21:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 특정 스트림에 앞서 넣은 작업이 끝날 때까지 기다린다. 장치 전체 대기 대신 필요한 스트림만 기다린다. 예제는 빈 스트림이라 호출 형태를 보여 주며 처리량 비교 예제는 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_))...</summary>
				</entry><entry>
		<title>cudaStreamDestroy() :: CUDA 스트림 핸들 정리하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86727"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86727#comment"/>		<id>https://chaegeon.com/study/86727</id>
		<published>2026-10-26T23:50:11+09:00</published>
		<updated>2026-10-26T23:50:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 사용이 끝난 CUDA 스트림 핸들을 정리한다. 핸들 정리와 작업에 사용한 버퍼의 안전한 해제 시점을 같은 것으로 생각하지 않는다. 예제의 스트림에는 실제 처리 작업이 없다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ ex...</summary>
				</entry><entry>
		<title>cudaStreamCreateWithFlags() :: 플래그와 함께 CUDA 스트림 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86724"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86724#comment"/>		<id>https://chaegeon.com/study/86724</id>
		<published>2026-10-26T23:15:57+09:00</published>
		<updated>2026-10-26T23:15:57+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 기본 스트림과의 동기화 관계 등 옵션을 지정해 스트림을 만든다. cudaStreamNonBlocking을 사용한다. 이 플래그의 nonblocking은 모든 호스트 호출이 무조건 즉시 반환한다는 뜻이 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_s...</summary>
				</entry><entry>
		<title>cudaStreamCreate() :: 비동기 작업 스트림 만들기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86721"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86721#comment"/>		<id>https://chaegeon.com/study/86721</id>
		<published>2026-10-26T20:51:03+09:00</published>
		<updated>2026-10-26T20:51:03+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 작업 순서를 담을 CUDA 스트림을 만든다. 예제는 생성 후 정리하는 최소 수명이다. 서로 다른 스트림이 있다고 반드시 하드웨어에서 동시에 실행되는 것은 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ }...</summary>
				</entry><entry>
		<title>cudaGetErrorName() :: CUDA 오류의 심볼 이름 얻기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86718"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86718#comment"/>		<id>https://chaegeon.com/study/86718</id>
		<published>2026-10-26T19:09:08+09:00</published>
		<updated>2026-10-26T19:09:08+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA 오류 코드의 심볼 이름을 문자열로 읽는다. 설명 문장과 달리 cudaErrorInvalidValue 같은 이름이 나온다. 로그에서 오류 이름과 호출 위치를 함께 남기기 좋다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); ...</summary>
				</entry><entry>
		<title>cudaGetErrorString() :: CUDA 오류 코드를 설명 문자열로 바꾸기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86715"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86715#comment"/>		<id>https://chaegeon.com/study/86715</id>
		<published>2026-10-26T02:30:30+09:00</published>
		<updated>2026-10-26T02:30:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA 오류 코드를 사람이 읽는 설명으로 바꾼다. 예제는 cudaErrorInvalidValue라는 상수를 설명한다. 실제 API가 실패한 것처럼 보이게 만들기 위한 코드가 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \...</summary>
				</entry><entry>
		<title>cudaPeekAtLastError() :: 마지막 CUDA 오류를 초기화 없이 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86712"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86712#comment"/>		<id>https://chaegeon.com/study/86712</id>
		<published>2026-10-25T21:47:38+09:00</published>
		<updated>2026-10-25T21:47:38+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 마지막 CUDA 오류를 읽되 오류 상태는 지우지 않는다. getLastError()와 조회 후 상태가 다르다. 이 예제는 상태 조회 방식만 보여 주고 일부러 GPU 오류를 발생시키지는 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); ...</summary>
				</entry><entry>
		<title>cudaGetLastError() :: 마지막 CUDA 오류를 읽고 상태 초기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86709"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86709#comment"/>		<id>https://chaegeon.com/study/86709</id>
		<published>2026-10-25T21:06:41+09:00</published>
		<updated>2026-10-25T21:06:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 현재 호스트 스레드에 기록된 마지막 CUDA 오류를 읽고 지운다. 커널 실행 설정 오류를 확인할 때 쓰지만 비동기 커널의 모든 실행 오류가 즉시 드러나는 것은 아니다. 완료 대기 뒤 검사와 역할을 구분한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetE...</summary>
				</entry><entry>
		<title>cudaDeviceSynchronize() :: 앞서 제출한 GPU 작업 완료 기다리기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86706"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86706#comment"/>		<id>https://chaegeon.com/study/86706</id>
		<published>2026-10-25T20:21:23+09:00</published>
		<updated>2026-10-25T20:21:23+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이전에 제출한 해당 장치 작업들이 끝날 때까지 호스트가 기다린다. 실행 중 GPU에서 난 오류를 확인하는 경계가 될 수 있다. 예제처럼 작업 없이 호출하면 완료 대기 형태만 보여 줄 뿐 GPU 성능을 측정한 것이 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n...</summary>
				</entry><entry>
		<title>cudaMemGetInfo() :: 사용 가능 CUDA 메모리 크기 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86703"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86703#comment"/>		<id>https://chaegeon.com/study/86703</id>
		<published>2026-10-24T18:02:18+09:00</published>
		<updated>2026-10-24T18:02:18+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA가 보고하는 남은 메모리와 전체 메모리 바이트 수를 읽는다. available과 total을 구분한다. Jetson의 공유 물리 메모리 구조 때문에 데스크톱 독립 VRAM 수치와 같은 의미로 해석하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorStrin...</summary>
				</entry><entry>
		<title>cudaFreeHost() :: CUDA 페이지 잠금 호스트 메모리 해제하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86700"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86700#comment"/>		<id>https://chaegeon.com/study/86700</id>
		<published>2026-10-24T15:27:31+09:00</published>
		<updated>2026-10-24T15:27:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CUDA로 확보한 페이지 잠금 호스트 메모리를 해제한다. 일반 malloc()이나 cudaMalloc() 결과를 넘기지 않는다. 사용 중인 비동기 전송이 끝난 다음 버퍼를 정리한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); ...</summary>
				</entry><entry>
		<title>cudaHostAlloc() :: 옵션을 지정해 페이지 잠금 메모리 확보하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86697"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86697#comment"/>		<id>https://chaegeon.com/study/86697</id>
		<published>2026-10-24T14:11:56+09:00</published>
		<updated>2026-10-24T14:11:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 옵션을 지정해 페이지 잠금 호스트 메모리를 할당한다. 예제는 기본 플래그다. 매핑이나 다른 캐시 정책을 사용하려면 해당 Jetson의 지원 조건을 따로 맞춘다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ ...</summary>
				</entry><entry>
		<title>cudaMallocHost() :: 페이지 잠금 호스트 메모리 할당하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86694"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86694#comment"/>		<id>https://chaegeon.com/study/86694</id>
		<published>2026-10-24T13:57:16+09:00</published>
		<updated>2026-10-24T13:57:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 CPU가 사용할 페이지 잠금 메모리를 확보한다. GPU 디바이스 메모리를 할당하는 함수와 다르다. 해제에는 free()가 아니라 cudaFreeHost()를 사용한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while ...</summary>
				</entry><entry>
		<title>cudaMemcpyAsync() :: 스트림에 비동기 복사 제출하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86691"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86691#comment"/>		<id>https://chaegeon.com/study/86691</id>
		<published>2026-10-24T13:45:41+09:00</published>
		<updated>2026-10-24T13:45:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 지정 스트림에 복사 작업을 제출한다. 페이지 잠금 호스트 버퍼를 준비하고 스트림 완료를 기다린 뒤 해제한다. Async라는 이름만으로 모든 메모리 조합에서 호스트가 절대 기다리지 않는다는 뜻은 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErr...</summary>
				</entry><entry>
		<title>cudaMemcpy() :: 호스트와 디바이스 사이 데이터 복사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86688"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86688#comment"/>		<id>https://chaegeon.com/study/86688</id>
		<published>2026-10-23T23:38:47+09:00</published>
		<updated>2026-10-23T23:38:47+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 호스트와 디바이스 등 두 메모리 영역 사이로 바이트를 복사한다. 예제는 CPU 배열을 GPU로 보낸다. HostToDevice 방향과 sizeof(host)를 함께 읽어 원소 수, 바이트 수 혼동을 피한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_statu...</summary>
				</entry><entry>
		<title>cudaMemset() :: 디바이스 메모리를 바이트 값으로 채우기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86685"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86685#comment"/>		<id>https://chaegeon.com/study/86685</id>
		<published>2026-10-23T22:46:02+09:00</published>
		<updated>2026-10-23T22:46:02+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 디바이스 메모리의 각 바이트를 같은 값으로 채운다. 예제는 int 64개의 바이트를 0으로 만든다. 값 인수를 1로 바꾸면 int 값 1 배열이 되는 것이 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } wh...</summary>
				</entry><entry>
		<title>cudaFree() :: 디바이스 메모리 해제하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86682"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86682#comment"/>		<id>https://chaegeon.com/study/86682</id>
		<published>2026-10-23T21:34:09+09:00</published>
		<updated>2026-10-23T21:34:09+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 cudaMalloc() 등으로 확보한 디바이스 메모리를 해제한다. 해제한 포인터를 다음 커널에 넘기지 않는다. 주소 변수의 값이 자동으로 NULL로 바뀌는 것도 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaMalloc() :: 디바이스 메모리 할당하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86679"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86679#comment"/>		<id>https://chaegeon.com/study/86679</id>
		<published>2026-10-23T21:05:43+09:00</published>
		<updated>2026-10-23T21:05:43+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 GPU 작업에 사용할 디바이스 메모리를 확보한다. float 1024개에 필요한 바이트 수를 계산한다. 변수 p는 주소를 담는 호스트 변수이며 p가 가리키는 디바이스 데이터를 CPU에서 일반 배열처럼 읽지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetEr...</summary>
				</entry><entry>
		<title>cudaRuntimeGetVersion() :: 연결된 CUDA 런타임 버전 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86676"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86676#comment"/>		<id>https://chaegeon.com/study/86676</id>
		<published>2026-10-23T00:10:30+09:00</published>
		<updated>2026-10-23T00:10:30+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 프로그램에 연결된 CUDA 런타임 버전을 읽는다. 같은 보드에서도 어떤 라이브러리와 연결했는지에 따라 해석해야 한다. 소스 파일 확장자나 GPU 모델만으로 이 값을 추측하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_...</summary>
				</entry><entry>
		<title>cudaDriverGetVersion() :: CUDA 드라이버가 지원하는 버전 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86673"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86673#comment"/>		<id>https://chaegeon.com/study/86673</id>
		<published>2026-10-22T22:20:16+09:00</published>
		<updated>2026-10-22T22:20:16+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 드라이버가 지원하는 CUDA 버전 정보를 조회한다. 반환 정수는 버전 인코딩이다. nvcc --version의 빌드 도구 버전과 같은 항목이 아니다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \ } while (0) int main...</summary>
				</entry><entry>
		<title>cudaDeviceGetAttribute() :: CUDA 장치의 특정 기능 값 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86670"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86670#comment"/>		<id>https://chaegeon.com/study/86670</id>
		<published>2026-10-22T21:53:41+09:00</published>
		<updated>2026-10-22T21:53:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 GPU 기능 속성 하나만 골라 읽는다. 예제는 블록당 최대 스레드 수를 읽는다. 이 최대값을 모든 커널에 무조건 적용하면 레지스터와 공유 메모리 제약으로 실패할 수 있다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit...</summary>
				</entry><entry>
		<title>cudaGetDeviceProperties() :: CUDA 장치 속성 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86667"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86667#comment"/>		<id>https://chaegeon.com/study/86667</id>
		<published>2026-10-22T21:40:50+09:00</published>
		<updated>2026-10-22T21:40:50+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 GPU 이름과 실행 능력 같은 장치 정보를 한 구조체로 얻는다. p.name과 major/minor를 출력한다. sm_숫자는 compute capability이며 설치된 CUDA 버전 숫자와 다르다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); ...</summary>
				</entry><entry>
		<title>cudaSetDevice() :: 호스트 스레드의 CUDA 장치 선택하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86664"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86664#comment"/>		<id>https://chaegeon.com/study/86664</id>
		<published>2026-10-22T20:45:33+09:00</published>
		<updated>2026-10-22T20:45:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 이후 CUDA 작업에 사용할 장치를 선택한다. 예제는 0번을 고른다. 장치가 여러 개라면 getDeviceCount 결과 범위 안에서 선택하고 메모리와 스트림의 소속 장치도 맞춘다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(...</summary>
				</entry><entry>
		<title>cudaGetDevice() :: 현재 스레드가 선택한 CUDA 장치 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86661"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86661#comment"/>		<id>https://chaegeon.com/study/86661</id>
		<published>2026-10-22T20:18:53+09:00</published>
		<updated>2026-10-22T20:18:53+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 지금 호출 스레드에 선택된 CUDA 장치 번호를 읽는다. 출력 숫자는 GPU 개수가 아니라 현재 선택 번호다. 다른 호스트 스레드의 선택과 같다고 가정하지 않는다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1); \ } \...</summary>
				</entry><entry>
		<title>cudaGetDeviceCount() :: 사용 가능한 CUDA 장치 수 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86658"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86658#comment"/>		<id>https://chaegeon.com/study/86658</id>
		<published>2026-10-21T23:22:11+09:00</published>
		<updated>2026-10-21T23:22:11+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">Jetson에서 현재 CUDA 런타임에서 사용할 수 있는 GPU가 몇 개인지 읽는다. 출력된 개수 안에서 0부터 장치 번호를 고른다. 장치가 없다는 결과와 런타임 초기화 오류를 구분한다. #include &lt;cuda_runtime.h&gt; #include &lt;cstdio&gt; #include &lt;cstdlib&gt; #define CHECK(call) do { \ cudaError_t cuda_status_ = (call); \ if (cuda_status_ != cudaSuccess) { \ fprintf(stderr, &quot;%s\n&quot;, cudaGetErrorString(cuda_status_)); \ exit(1);...</summary>
				</entry><entry>
		<title>date :: 날짜 형식과 시간대 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86655"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86655#comment"/>		<id>https://chaegeon.com/study/86655</id>
		<published>2026-10-21T22:43:06+09:00</published>
		<updated>2026-10-21T22:43:06+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 현재 시각을 형식 문자열에 맞춰 출력한다. date -u &#039;+%Y-%m-%dT%H:%M:%SZ&#039; -u로 UTC를 선택했기 때문에 끝에 Z를 붙인다. 로컬 시각을 출력하면서 Z만 붙이면 잘못된 시간대 표시가 된다. 참고: date 매뉴얼</summary>
				</entry><entry>
		<title>env :: 환경 변수 목록과 실행 환경 지정하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86652"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86652#comment"/>		<id>https://chaegeon.com/study/86652</id>
		<published>2026-10-21T21:50:31+09:00</published>
		<updated>2026-10-21T21:50:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 명령 하나에만 적용할 환경 변수를 지정해 실행한다. env LC_ALL=C date LC_ALL=C로 date의 출력 언어와 로케일을 고정한다. 부모 셸의 같은 변수 값을 영구 변경하는 예제가 아니다. 참고: env 매뉴얼</summary>
				</entry><entry>
		<title>timeout :: 명령의 최대 실행 시간 제한하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86649"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86649#comment"/>		<id>https://chaegeon.com/study/86649</id>
		<published>2026-10-21T19:47:33+09:00</published>
		<updated>2026-10-21T19:47:33+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 명령이 너무 오래 실행되면 종료 요청을 보내도록 제한한다. timeout 3s sleep 10 echo &quot;$?&quot; 10초 sleep에 3초 한도를 줘 시간 초과 상태를 본다. 기본 시간 초과는 보통 124이며 명령의 자체 오류와 구분한다. 참고: timeout 매뉴얼</summary>
				</entry><entry>
		<title>lsof :: 프로세스가 열고 있는 파일 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86646"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86646#comment"/>		<id>https://chaegeon.com/study/86646</id>
		<published>2026-10-21T06:19:28+09:00</published>
		<updated>2026-10-21T06:19:28+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 프로세스가 열어 둔 파일과 소켓 목록을 읽는다. lsof -p $$ -p $$는 현재 셸 PID로 범위를 줄인다. 소켓도 파일 디스크립터로 관리돼 같은 도구에서 볼 수 있다. 참고: lsof 매뉴얼</summary>
				</entry><entry>
		<title>strace :: 프로세스의 시스템 호출 추적하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86643"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86643#comment"/>		<id>https://chaegeon.com/study/86643</id>
		<published>2026-10-20T23:42:09+09:00</published>
		<updated>2026-10-20T23:42:09+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 프로그램이 실제로 어떤 시스템 호출을 하는지 관찰한다. strace -f -e trace=openat,read,write cat /etc/os-release 예제는 공개 시스템 파일을 읽는 cat을 추적한다. -f는 자식도 따라가며 출력에 민감한 경로와 데이터가 남을 수 있다. 참고: strace 매뉴얼</summary>
				</entry><entry>
		<title>dmesg :: 커널 메시지 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86640"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86640#comment"/>		<id>https://chaegeon.com/study/86640</id>
		<published>2026-10-20T23:23:55+09:00</published>
		<updated>2026-10-20T23:23:55+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 커널이 남긴 메시지를 읽는다. dmesg --level=err,warn err,warn 수준만 골라 장치와 드라이버 문제의 단서를 찾는다. 권한 정책으로 읽기가 막히면 메시지가 없는 상황과 구분한다. 참고: dmesg 매뉴얼</summary>
				</entry><entry>
		<title>journalctl :: systemd 저널에서 로그 조회하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86637"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86637#comment"/>		<id>https://chaegeon.com/study/86637</id>
		<published>2026-10-20T23:07:27+09:00</published>
		<updated>2026-10-20T23:07:27+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 서비스나 시간 범위를 좁혀 systemd 로그를 읽는다. journalctl -u ssh --since today --no-pager -u ssh로 서비스, --since today로 오늘 이후만 선택한다. 결과가 비었다고 오류가 없었다는 뜻은 아니며 권한과 보관 기간도 본다. 참고: journalctl 매뉴얼</summary>
				</entry><entry>
		<title>systemctl :: systemd 서비스 상태 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86634"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86634#comment"/>		<id>https://chaegeon.com/study/86634</id>
		<published>2026-10-20T22:52:20+09:00</published>
		<updated>2026-10-20T22:52:20+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 systemd가 관리하는 서비스의 현재 상태를 읽는다. systemctl status ssh --no-pager status는 조회이고 restart처럼 재시작하지 않는다. ssh 서비스 이름은 배포판에 따라 sshd 등으로 다를 수 있다. 참고: systemctl 매뉴얼</summary>
				</entry><entry>
		<title>scp :: SSH를 통해 파일 복사하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86631"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86631#comment"/>		<id>https://chaegeon.com/study/86631</id>
		<published>2026-10-20T20:04:56+09:00</published>
		<updated>2026-10-20T20:04:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 SSH 연결로 파일 하나를 원격 경로에 복사한다. scp -P 22 file.txt user@server:./ 포트 옵션은 ssh의 -p와 달리 대문자 -P다. 목적지에 같은 파일이 있으면 덮어쓸 수 있어 경로를 명시한다. 참고: scp 매뉴얼</summary>
				</entry><entry>
		<title>ssh :: 암호화된 원격 셸 접속하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86628"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86628#comment"/>		<id>https://chaegeon.com/study/86628</id>
		<published>2026-10-19T23:28:36+09:00</published>
		<updated>2026-10-19T23:28:36+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 원격 서버의 암호화된 셸에 접속한다. ssh -p 22 user@server user와 server는 실제 계정과 주소로 바꾼다. -p는 SSH 포트이며 처음 접속한 호스트 키는 서버 관리 경로로 확인한다. 참고: ssh 매뉴얼</summary>
				</entry><entry>
		<title>rsync :: 파일 차이를 계산해 동기화하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86625"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86625#comment"/>		<id>https://chaegeon.com/study/86625</id>
		<published>2026-10-19T23:06:31+09:00</published>
		<updated>2026-10-19T23:06:31+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 원본과 대상의 차이를 비교해 복사할 항목을 계산한다. rsync -avn source/ destination/ -n은 실제 변경 없는 예행연습이다. source/ 뒤의 슬래시는 디렉터리 자체보다 그 내용을 복사하는 의미라 결과 경로를 먼저 읽는다. 참고: rsync 매뉴얼</summary>
				</entry><entry>
		<title>gzip :: 파일을 gzip 형식으로 압축하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86622"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86622#comment"/>		<id>https://chaegeon.com/study/86622</id>
		<published>2026-10-19T22:32:04+09:00</published>
		<updated>2026-10-19T22:32:04+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일 내용을 gzip으로 압축한다. gzip -c input.txt &gt;input.txt.gz -c는 결과를 표준 출력으로 보내 원본을 남긴다. 리다이렉션 목적지 input.txt.gz는 덮어쓸 수 있어 파일 이름을 확인한다. 참고: gzip 매뉴얼</summary>
				</entry><entry>
		<title>tar :: 아카이브 안의 파일 목록 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86619"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86619#comment"/>		<id>https://chaegeon.com/study/86619</id>
		<published>2026-10-19T21:43:56+09:00</published>
		<updated>2026-10-19T21:43:56+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 아카이브를 풀기 전에 안의 경로 목록부터 읽는다. tar -tf archive.tar -t는 목록 조회, -f는 대상 파일 지정이다. 이 예제는 archive.tar를 만들거나 해제하지 않는다. 참고: tar 매뉴얼</summary>
				</entry><entry>
		<title>sha256sum :: 파일의 SHA-256 해시 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86616"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86616#comment"/>		<id>https://chaegeon.com/study/86616</id>
		<published>2026-10-19T20:10:53+09:00</published>
		<updated>2026-10-19T20:10:53+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일의 SHA-256 값을 계산해 내용이 같은지 비교한다. sha256sum file.bin file.bin을 실제 확인할 경로로 바꾼다. 기대 해시도 신뢰할 수 있는 곳에서 얻어야 출처 검증에 도움이 된다. 참고: sha256sum 매뉴얼</summary>
				</entry><entry>
		<title>wget :: 다운로드 전에 URL 응답 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86613"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86613#comment"/>		<id>https://chaegeon.com/study/86613</id>
		<published>2026-10-18T16:22:40+09:00</published>
		<updated>2026-10-18T16:22:40+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 파일을 내려받기 전에 URL의 접근 가능 여부를 점검한다. wget --spider https://example.com --spider는 이 예제에서 파일을 실제 저장하지 않는 검사 모드다. 다운로드 자체의 예제와 구분한다. 참고: wget 매뉴얼</summary>
				</entry><entry>
		<title>curl :: HTTP 응답과 헤더 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86610"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86610#comment"/>		<id>https://chaegeon.com/study/86610</id>
		<published>2026-10-18T13:43:48+09:00</published>
		<updated>2026-10-18T13:43:48+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 HTTP 서버의 응답 헤더를 읽는다. curl -I --max-time 10 https://example.com -I는 HEAD 요청, --max-time 10은 전체 시간 제한이다. 명령 연결 성공과 HTTP 404 같은 응답 상태는 별도로 본다. 참고: curl 매뉴얼</summary>
				</entry><entry>
		<title>ping :: ICMP 응답으로 기본 연결 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86607"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86607#comment"/>		<id>https://chaegeon.com/study/86607</id>
		<published>2026-10-18T13:34:14+09:00</published>
		<updated>2026-10-18T13:34:14+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 ICMP 응답으로 기본 연결 상태를 확인한다. ping -c 3 127.0.0.1 예제는 내 컴퓨터의 루프백 127.0.0.1에 세 번 보낸다. 이 성공만으로 인터넷이나 웹 서비스가 정상임을 증명하지는 않는다. 참고: ping 매뉴얼</summary>
				</entry><entry>
		<title>ip route :: 패킷 경로와 기본 게이트웨이 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86604"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86604#comment"/>		<id>https://chaegeon.com/study/86604</id>
		<published>2026-10-18T01:28:54+09:00</published>
		<updated>2026-10-18T01:28:54+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 기본 게이트웨이와 대상별 실제 선택 경로를 읽는다. ip route show ip route get 1.1.1.1 route show는 테이블, route get 1.1.1.1은 그 주소로 보낼 때 선택할 경로다. get은 실제 패킷을 보내는 ping이 아니다. 참고: ip 매뉴얼</summary>
				</entry><entry>
		<title>ip address :: 네트워크 인터페이스 주소 확인하기</title>
		<link rel="alternate" type="text/html" href="https://chaegeon.com/study/86601"/>
	<link rel="replies" type="text/html" href="https://chaegeon.com/study/86601#comment"/>		<id>https://chaegeon.com/study/86601</id>
		<published>2026-10-17T17:54:41+09:00</published>
		<updated>2026-10-17T17:54:41+09:00</updated>
		<author>
			<name>서아무개</name>
		</author>
		<summary type="text">리눅스 셸에서 네트워크 인터페이스의 주소와 상태를 읽는다. ip -brief address show -brief로 짧게 표시한다. 링크 UP 상태와 원하는 IP가 붙은 상태는 별도로 확인한다. 참고: ip 매뉴얼</summary>
				</entry></feed>
