2009-09-20 3 views
1

시스템의 이전 동작을 기반으로 향후 동작을 예측하는 알고리즘을 찾고 있습니다.이전 동작을 기반으로 시스템의 동작을 예측하는 방법

빈 블록의 공개 목록이있는 병렬 메모리 할당자를 만들고 있습니다. 필요한 경우 각 스레드는이 목록에서 블록을 가져 와서 할당 할 수 있습니다. 블록은 할당 크기 (8, 12, 16 바이트 ~ 약 4KB)에 따라 저장소에 그룹화됩니다. 블럭이 비게되면 (물론 동기화 오버 헤드와 함께) 전역 목록으로 돌아 간다. 빈에서 어떤 블럭도 비어 있지 않으면, 새로운 빈을 얻기 전에 다른 빈의 블럭에서 위치를 "훔치려"시도합니다. , 5 개 블록 소요 메모리, 말할 수

  1. 스레드가 할당 가능성이있을 수 있습니다 :

    지금 저를 염려 두 가지 상황이 있습니다. 잠시 후,이 메모리를 모두 할당 해제합니다 (블록은 전역 목록으로 이동합니다). 그 직후, 5 블록을 다시 할당하고 할당을 해제합니다. 이 경우 동기화 오버 헤드를 피하기 때문에 항상 5 개의 블록을 유지하고 전체 목록으로 반환하지 않는 것이 좋습니다.

  2. 할당자가 위치를 "도용"하는 경우, 낭비되는 메모리를 사용합니다. 그러나 이것이 메모리 사용을 증가시키는 경우가 있습니다.

나는 패턴의이 종류를 관찰 할 수있는 시스템을 확인하고 다음 번 것을의 할당 자 할 것이 현명하다 무엇을 알고 무엇을하지 않도록 어딘가에 결과를 저장할 (빈 적어도 N 블록을 유지 X, bin Y에서 "도용"하지 마십시오).

유전 알고리즘은 어떤 용도로 사용됩니까? 나는 그들에 관해 아무 것도 모른다. 그러나 나는 그들이 기계 학습에 능숙하다고 들었다. 사전에

감사합니다!

+2

잠재적 이득이 알고리즘의 원인이되는 여분의 오버 헤드로 인해 왜소하게 될지 모르는 큰 위험이 있다고 생각합니다. 또 다른 한가지는 상당한 양의 역사적인 데이터가 없다면 역사에 기반한 미래의 할당을 예측하는 것이 거의 불가능하다는 것입니다. 그러한 데이터를 수집하면 할당에 오버 헤드가 추가됩니다. IMHO 당신은 OS/런타임이 이것을 처리하게하는 것이 좋습니다. –

+0

가비지 수집기 또는 할당 자에서만 작업하고 있습니까? 즉 빈 블록을 찾아야합니까, 아니면 '무료'방법으로 자신이 누구인지 알고 계십니까? – Anna

+0

사실, 분석 알고리즘의 추가 오버 헤드는 별도의 스레드에서 가져올 수 있습니다. 실제 할당에 영향을 줄 필요는 없습니다. 그들은 단지 요청 된 것을 기록하고 현재 전략을 사용해야합니다. – MSalters

답변

1

나는 artificial neural networks이 유전자 알고리즘보다 더 적합하다고 믿습니다.

체크 아웃이 SO 질문 :

+0

ML을 배우는 기계는 학습 엔진이 "거의"답을 알고있을 때만 작동한다는 것을 알려줍니다. Nueral 그물은 작동하지만, 문제에 대해 알려진 것이 없으며 ML 공리를 위반하는 경우 만병 통치약으로 제안됩니다. 당신이 무엇을해야할지 모른다면, 신경망은 답이 아닙니다. –

+0

@Ira Baxter, Igratian은 유전자 알고리즘 사용에 관해 질문했으며 ANN이 더 적절하다고 말했습니다. ANN을 훈련하면 유사한 패턴이 관찰 될 수있는 경우에 ANN을 사용할 수 있습니다. 어쩌면이 문제에서 이그라 첸은 ANN보다 훨씬 더 훌륭하고 우아한 알고리즘을 찾을 수 있습니다. 나는 ANN이 만병 통치약이 아니라는 것에 동의한다. –

2

. 이 기사의 대부분은 몇시에 무슨 일이 일어 났는지, 왜 그런지에 대한 시간 측정을 제공합니다. 그래서 저는이 분야에서 이미 수행 된 것을 살펴 보도록 권합니다. 꽤 많은 흥미로운 아이디어가 있습니다. 그 중 많은 것들이 잘 작동하고, 현명하고 흥미로운 개념이 있습니다.

기계 학습 기술은 배우고 알아보기에 재미 있지만, 실제 생활에서는 좋은 결과를 내지 않을 것이라고 생각합니다. 그 이유는 일하기 위해 필요한 많은 오버 헤드 때문입니다. 나는 현대의 캐시가 작동하는 방식에 더 가깝다. 가장 최근에 사용 된 방법이 조금 다르다.

그래서 귀하의 예제에서, 나는 다음을 수행합니다 :

  • 는 다른 크기로 만든 "캐시"를 사용하고, 그것을 사용할 수 있습니다. 즉, 시스템에 반환되지 않고 '재사용'에 사용되는 최소 크기를 저장하는 것을 의미합니다.
  • 캐시 크기는 동적으로 결정될 수 있습니다.이 스레드에 대해 새 메모리 할당 및 할당 해제 빈도를 확인하십시오. 타작이 너무 자주 수행되는 경우 (종종 시간 매개 변수 일 수 있음) 캐시 크기가 증가합니다.
  • 훔치기와 관련하여 : 캐시 크기는 훔칠 수 없으므로 캐싱과 타작 문제를 해결할 수 있습니다.

이 방법의 가장 큰 단점은 메모리 오버 헤드입니다. 캐시 크기를 줄이면 (캐시 ​​크기가 줄어들어도) 줄일 수 있습니다.

0

아마도 초당 특정 스레드에 대한 특정 크기의 블록 할당 및 할당 해제 횟수를 계산해야합니다. 카운터 수가 높고 할당 수가 할당 해제 수와 거의 같으면 다음 초에 해당 할당량을 무시하려고 할 수 있습니다.

0

크기가 2, 4, 8, 16 등인 무료 블록을 사용하려는 경우 스레드는 크기 2, 4, 8, 16 등의 메모리를 요청해야합니다. 2의 가장 가까운 힘으로

+0

패턴 8,12,16,24,32,48,64,96, ... 역시 의미가 있습니다. – MSalters

+0

예.하지만 할당 체계가 무엇이든 관계없이 동기화되어야합니다. – Bill

+0

Duh. 이것은 분명하지 않습니까? –