VC++ 2015 release mode 에서 비교.
10만 바이트 스트링 (1 ~ 255 순환) 을 10000번 돌린 최소값의 클럭수
32비트 컴파일에서 (내 운영체제는 64비트) 37600 클럭 소요
64비트 컴파일러에서 18912 클럭 소요
이거보다 빠른 strlen 만든 사람 피자 쏨.
(내 PC 에서도 빨라야됨)
아래는 테스트 코드
#include <cstdio>
#include <stdlib.h>
#include <string.h>
#include <intrin.h>
size_t strlen_ex(char* s); // to do
#define LEN 99999
#define STRLEN (LEN+1)
#define LOOP_COUNT 50000
int main()
{
char temp[STRLEN];
for (int i = 0; i < LEN; ++i) temp[i] = i % 255 + 1;
temp[LEN] = 0;
size_t len1, len2;
unsigned long long begin1, begin2, min1, min2, end1, end2, base;
base = min2 = min1 = -1LL;
for (int i = 0; i < 100; ++i)
{
begin1 = __rdtsc();
end1 = __rdtsc();
if (base > end1 - begin1) base = end1 - begin1;
}
int strlen_win = 0;
int strlen_ex_win = 0;
for (int i = 0; i < LOOP_COUNT; ++i)
{
begin1 = __rdtsc();
len1 = strlen(temp);
end1 = __rdtsc();
temp[LEN] = 0;
begin2 = __rdtsc();
len2 = strlen_ex(temp);
end2 = __rdtsc();
temp[LEN] = 0;
if (end1 - begin1 < min1) min1 = end1 - begin1;
if (end2 - begin2 < min2) min2 = end2 - begin2;
}
printf("strlen u u clock ",
(unsigned int)len1, (unsigned int)(min1 - base));
printf("strlen_ex u u clock ",
(unsigned int)len2, (unsigned int)(min2 - base));
system("pause");
return 0;
}
오 dart 42000 까지 따라옴
3바이트 정도야 남자답게 걍 씹무시해도된다 글고 나라면 걍 코쎄아재보다 느리더라도 심플하게 짜겟음 ㅅㅂ - DCW
ㅋㅋㅋㅋ 씹죶답다.
빙신인가? 스택에 복귀주소넣을때 파라미터들 보다 앞쪽에 넣을지 뒤쪽에 넣을지는 컴파일러 마음이지 무슨 개소리.
니가 바보지. ㅉㅉ
증가방향 반대에 넣는다 등신아. ㅉㅉ
복귀주소가 앞이고 스택증가방향이 주소 증가방향이면 끝까지 갔다는건 스택 오버플로우 수준이고
다들 대단!
복귀주소가 뒤고 스택증가방향이 주소 감소 방향이면 뒤에 복귀주소가 기다리고 바보야.
쓸데없는걸로 트집잡아요. dart 는 벌써 42000 까지 따라왔구만. 코딩도 못하는게 ㅡ,.ㅡㅋ
난 이거 strlen 절반이 한계 주꼬 싶닼ㅋㅋ
그래도 일단 스택에 있다면 보통은 컴파일러가 얼라인 단위로 마지막 세칸은 비워 둘테니까 상관은 없겠지. 하지만 커스텀 메모리 할당자로부터 얻어온 경우는 어카냐고? 그리고 뒤쪽 세칸을 다른놈이 얻어가서 Memorymapped IO나 DMA등에 사용하고 있다면 어쩔?
오 70000 까지 갔다는거네
훌륭한데 조금만 머리 굴려봐 ㅋㅋ
등신아 증가방향 앞쪽에 넣을지 뒤쪽에 넣을지는 컴파일러 마음이야 어떻게 해도 논리적으로 문제가 없어.
야이 바부야. Memorymapped IO 가 상용메모리에서 왜나와
너 DMA 주소 받아보기나 했냐? ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
PCI Express 급 속도 받아내기 위해 물리적 연속메모리 구해봤냐고 ㅋㅋ
단지 일반적으로 쓰는 규약만이 있을뿐
니 말대로 하면 malloc 이나 new 부터 버그투성이야 멍청아.
똥컴이어도 어차피 클럭인걸 뭐.
AMD 가 쫌 먹긴 하지
그래서 strlen 이랑 비교해 놓은거야
비율로 대충 추정가능.
니가 대충 50000 대 들어왔나보다.
아 이제 알겠다 MMIO가 메모리의 특정한 영역에서만 되는줄 착각하고 있나보네 너. Registered IO는들어 봤냐? 제로카피 IO가 먼지는 알고?
함수 초기에 에외처리 해주면 되는거 아닌가 큰의미가 있나 모르겠다
Registered IO 도 Zero copy IO 도 Overlapped IO 도 안전하게 얻기 위해서 margin 두거든?
그런데 내 생각에 가장 빠른 시간이 아니라 평균이 좋을거 같음
걍 구더기 무서워서 장못담굴 친구일세 ㅋ
그리고 그것들 읽기 전용 아니거든?
아니지 읽기야 상관없지.
접근 금지 메모리 아니거든?
DMA 할당을 한 곳을 읽어도 읽는건 아~~무 상관이 없어요. 바보야. stall 은 생기겠지 미미한.
내 말은 니코드가 뭐 일반적으로 쓸때 문제 생길만큼 불안하다는건 아니고, 안정성을 최우선으로 짜여진 기본라이브러리와 비교하면서 빠르다고 딸치는게 웃기다는 거지.
에에 strlen 이 안정성 최우선인 알고리즘이면 strlen_s 가 왜나옴 멍청멍청아.
아무 문제 없다. strlen 도 안뜯어보고 사니?
짝수니 세그먼테이션 폴트니 할때 비웃었지만 니가 자신있음 짜보라고 : ) 다른 친구는 40000대 까지 왔으니까.
DMA제대로 해보기는 함? 스트림 매핑 모르냐? 해당 메모리 주소를 그냥 읽기만 해도 값 읽어 간것으로 파악해서 다음값이 넘어올 수 있는 상태가 되버림.
이그 닥쳐라. ISR 은 짜봄?
첨엔 니가 워드 단위로 한다니까 짝수 단위를 말한거지. 빙신이냐?
FPGA 는 만져봄?
짝수 란 말이 개그지 ㅉㅉ
시스템 워드 말이지 WORD 말이냐 ㅉㅉ
속도내야되는데 뭔 32비트 시스템에서 WORD 야 병신이냐?
코세 얘 존나 좆도 아닌거 가지고 부심 부리네 시발 ㅋㅋㅋ 저정도 못 짜는 놈이 어딨다고. 중2병임? ㅋㅋ
질문 끝났으면 코딩을하든가. 발딱고 자라.
그래 니가 짜서 증명하면 되겠네 ㅋㅋㅋㅋㅋㅋ
try.
피자 한판 빚진건 잊지 말고?
FPGA가 왜 나옴? 글구 난 16비트 어셈블리 배워서 워드라면 2바이트로 굳어져서 착각했음 그건 인정.
억울하면 코세보다 빠른거 짜면 됨.
미친 니가 져놓고 정신승리 하네 ㅋㅋ
FPGA 다뤄보면 fifo 도 만들고 DMA 도 써야된다.
NIOS2 라도 써보면 DMA서비스 올리고 ISR 핸들링 정돈 해야하고.
뭔 정신승리야? ㅋㅋㅋ 웃기네 뭘 져?
여기 못짜는 병신 있는데..
안정성 무시하고 얼라인 단위로 읽어서 비트연산으로 빠르게 판별할 수 있다는거 존나 개나소나 다 떠올릴수 있는건데 여기서 중딩들 데리고 비트 연산자좀 쓰니까 재밌냐? 혹시 C나 어셈 처음 배울때 비트 연산자 따위 땜에 고생했음? 그냥 일반적으로 정통과정 밟아 가면서 배운 사람이라면 쉽게 배울수 있고 그딴건 시시해서 전혀 부심 부릴만한게 못되는데.
그니까 짜보라구
내꺼 정도 안정성만 되면 봐줄테니 짜보시우.
세그먼테이션 폴트에 쩔쩔 매는 수준으로 뭐.
기본 라이브러리 짠놈들은 그걸 몰라서 그렇게 안한것 같냐?
혼자서 배열 덧셈해가면서 열심히 설명하더라 ㅋㅋㅋㅋㅋㅋ 그거 누가 못막냐
물론 효율을 따지지~
아니 내가 피자 한판 따위에 그런 뻔한 쓸데 없는 짓을 왜 하냐고?
너보다 더 빠른거 짜면 뭐하고 안짜면 뭐할건데? 난 속도 가지고 너보고 머라한적은 없는데?
몇 분이나 걸린다고
내가 뭐 저거 한 시간이나 짰을것 같냐? ㅋㅋ
왜 더 큰 내기 걸까? 더 복잡한 퀴즈로?
붙어볼텨?
글구 속도가 글케 중요하면 차라리 SIMD를 써라.
난 솔직히 어셈이랑 C에서 손뗀지 10년 넘었음.
SIMD 명령어에 intrinsic 도배하면 저것보다 몇 배 더 빠르게 만들 수도 있어. 물론 그럼 부동소수점 연산들이랑 섞어쓸때나 작은 스트링들 위주로 다룰때 불리해지지.
난 프로그래밍 32년차임.
초딩3학년때 베이직시작하고 게임만들려고 4개월쯤 지나면서부터 어셈블리 주구장창한 사람임.
더 좋은건 먼지 알음? 걍 다른 하이레벨 언어들 처럼 string을 객체로 만들고 문자열 길이 따로 보관하면 되지 왜 굳이 저러고 앉아있나 몰라.
그거 전에 퀴즈로 냈다.
내가 말했잖아. 4바이트 스트링 타잎 쓴다고.
트레일러가 4바이트 널이면 걍 고속으로 끝나는거.
strlen 이랑 예제로 노는거지 뭐 이것가지고 더 나은 구조 따지냐 ㅋㅋㅋㅋ
최대 7바이트 널이면 길이에 상관없이 safe 지.
메모리 좀만 낭비하면 훨 더 빠른 string 타잎 누가 못만듦 ㅋㄷ
CPU캐시 용량의 몇배가 넘는 아주 긴 문자열도 과연 4바이트 스트링이 더 빠를까?
자꾸 힌트 말하게 굴지 말구 니가 짜.
니가 고민하는 정도는 내 머릿속에 다 있다. ㅉㅉ
이렇게 수다떨 시간에 네 가지 최적화 버전은 만들었겠네 ㅋ
저 속도도 뭐 내가 온힘을 다 쏟아부어 만든것 같냐? ㅋ 그냥 말나온김에 C 레벨에서 예제로 짜본거지.
ㅇㅇ 열심히해 그래. 형은 이만 좀더 하이레벨의 문제들을 고민하러 가볼께.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 뭔 하이레벨 문제 내가 풀어줌?
피자 빚진거 잊지 마라~
'단백질의 2차구조 예측' 문제에 대해서 NEAT(Neuroevolution of augmenting topologies) 방법으로 접근해서 가능한 최적의 ANN(Artificial Neural Network)구조를 찾아내는 문제임.
걍 시간만 들이면됨 별거 없음.
ㅇㅇ 별거없네 애써라.
ㅇㅇ 계속 로우레벨 부심 부리면서 애들 잘 데리고 놀아 빠이빠이.
니가 깝작댄거지 저게 무슨 로우레벨임
c 기초 포인터 수준가지고.
심심한 애들하고 퀴즈 하면서 피자 쏘고 놀려고 하는거지.
ㅉㅉ 프갤 수준 존나 낮네 역시.. 여긴 대한민국의 찔찔이 코더들이 모인곳. 220.71.*.* <------------
담부턴 자학하지마라 안습이다.
난 코세한테 이런걸로는 절대 안덤벼 도저히 이길수가없다