BR112018007623B1 - Método e dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa e memória legível por computador - Google Patents

Método e dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa e memória legível por computador Download PDF

Info

Publication number
BR112018007623B1
BR112018007623B1 BR112018007623-6A BR112018007623A BR112018007623B1 BR 112018007623 B1 BR112018007623 B1 BR 112018007623B1 BR 112018007623 A BR112018007623 A BR 112018007623A BR 112018007623 B1 BR112018007623 B1 BR 112018007623B1
Authority
BR
Brazil
Prior art keywords
task
dynamic
resource
dependency
conflict
Prior art date
Application number
BR112018007623-6A
Other languages
English (en)
Other versions
BR112018007623A2 (pt
Inventor
Arun Raman
Tushar Kumar
Original Assignee
Qualcomm Incorporated
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/884,979 external-priority patent/US10977092B2/en
Application filed by Qualcomm Incorporated filed Critical Qualcomm Incorporated
Publication of BR112018007623A2 publication Critical patent/BR112018007623A2/pt
Publication of BR112018007623B1 publication Critical patent/BR112018007623B1/pt

Links

Abstract

MÉTODO PARA PROGRAMAÇÃO EFICIENTE DE TAREFA NA PRESENÇA DE CONFLITOS. Modalidades incluem dispositivos de computação, aparelho e métodos implementados por um dispositivo de computação para programação de tarefa na presença de bordas de conflito de tarefa em um dispositivo de computação. O dispositivo de computação pode determinar se uma primeira tarefa e uma segunda tarefa são relacionadas por uma borda de conflito de tarefa. Em resposta à determinação de que a primeira tarefa e a segunda tarefa são relacionadas pela borda de conflito de tarefa, o dispositivo de computação pode determinar se a segunda tarefa adquire um recurso exigido para execução da primeira tarefa e segunda tarefa. Em resposta à determinação de que a segunda tarefa falha em adquirir os recursos, o dispositivo de computação pode atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa.

Description

ANTECEDENTES
[001] Aplicativos que são responsivos e de alto desempenho podem melhorar a experiencia do usuário. O modelo de programação de tarefa paralela é amplamente usado para desenvolver aplicativos que apresentam alto desempenho e são responsivos a usuários. Nesse modelo de desenvolvimento de aplicativo, computação em um aplicativo é dividida em tarefas - trechos pequenos de trabalho - com algumas tarefas sendo especificadas para rodar após algumas outras tarefas terminarem, essas são chamadas dependências de tarefa. O gerenciamento da execução de tarefas paralelas para evitar conflitos e suportar interdependências entre tarefas apresenta um desafio de programação.
SUMÁRIO
[002]Os métodos e aparelhos de várias modalidades fornecem circuitos e métodos para programação de tarefa na presença de bordas de conflito de tarefa em um dispositivo de computação. Várias modalidades podem incluir determinar se uma primeira tarefa e uma segunda tarefa são relacionadas por uma borda de conflito de tarefa, determinar se a segunda tarefa adquire um recurso exigido para execução da primeira tarefa e da segunda tarefa em resposta à determinação de que a primeira tarefa e a segunda tarefa são relacionadas pela borda de conflito de tarefa, e atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso.
[003] Em algumas modalidades, a atribuição de uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso pode incluir determinar se uma execução da primeira tarefa está completa, e atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a execução da primeira tarefa não está completa.
[004] Em algumas modalidades, a atribuição de uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso pode incluir bloquear a primeira tarefa, atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa após bloqueio da primeira tarefa e desbloquear a primeira tarefa.
[005] Em algumas modalidades, atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa pode incluir remover um indicador da borda de conflito de tarefa a partir de uma estrutura de dados e adicionar um indicador da borda de dependência de tarefa dinâmica à estrutura de dados.
[006] Algumas modalidades podem incluir adicionalmente a primeira tarefa adquirindo o recurso, em que um deadlock e uma dependência de tarefa dinâmica cíclica podem ser evitados por exigir que o recurso seja processado em uma ordem relacionada a pelo menos um outro recurso exigido para execução da segunda tarefa ou uma terceira tarefa, sinalizar um núcleo de processador atribuído para executar a segunda tarefa para entrar em um estado inativo em resposta à atribuição da borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa, receber um sinal de que a primeira tarefa está completa e sinalizar o núcleo de processador atribuído para executar a segunda tarefa para ativar a partir do estado inativo.
[007] Algumas modalidades podem incluir ainda determinar se uma política de conflito é atendida, e determinar se a segunda tarefa é uma tarefa pronta em resposta à determinação de que a política de conflito é atendida ao invés de atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso.
[008] Em algumas modalidades a determinação de se a política de conflito é atendida pode incluir ainda determinar se uma quantidade limiar de bordas de dependência de tarefa dinâmica é atribuída à segunda tarefa em uma sessão de atribuição.
[009] Em algumas modalidades, a política de conflito pode incluir uma quantidade limiar de bordas de dependência de tarefa dinâmica atribuídas à segunda tarefa em uma sessão de atribuição e a quantidade limiar de bordas de dependência de tarefa dinâmica é determinada com base pelo menos em um de consumo de energia para tarefas de execução, latência de execução de tarefa e criticidade da segunda tarefa.
[0010] Várias modalidades podem incluir um dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa. O dispositivo de computação pode incluir um recurso, incluindo um dispositivo de memória exigido para execução de uma primeira tarefa e uma segunda tarefa, uma pluralidade de núcleos de processador comunicativamente conectados entre si incluindo um primeiro núcleo de processador, um segundo núcleo de processador e um terceiro núcleo de processador, em que o segundo núcleo de processador e o terceiro núcleo de processador são comunicativamente conectados ao recurso e o primeiro núcleo de processador é configurado com instruções executáveis por processador para executar operações de um ou mais dos métodos de modalidade descritos acima.
[0011] Várias modalidades podem incluir um dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa tendo meio para executar funções de um ou mais dos métodos de modalidade descritos acima.
[0012] Várias modalidades podem incluir uma mídia de armazenagem legível em processador não transitória tendo armazenado na mesma instruções executáveis por processador configuradas para fazer com que um processador de um dispositivo de computação execute operações de um ou mais dos métodos de modalidade descritos acima.
BREVE DESCRIÇÃO DOS DESENHOS
[0013] Os desenhos em anexo, que são incorporados aqui e constituem parte desse relatório descritivo, ilustram modalidades de exemplo de várias modalidades, e juntamente com a descrição geral dada acima e a descrição detalhada dada abaixo, servem para explicar as características das reivindicações.
[0014] A figura 1 é um diagrama de blocos de componente ilustrando um dispositivo de computação adequado para implementar uma modalidade.
[0015] A figura 2 é um diagrama de blocos de componente ilustrando um processador de múltiplos núcleos de exemplo adequado para implementar uma modalidade.
[0016] As figuras 3A-3D são diagramas esquemáticos ilustrando gráficos de tarefa de exemplo incluindo dependências de tarefa dinâmica de acordo com uma modalidade.
[0017] As figuras 4A-4D são diagramas esquemáticos ilustrando gráficos de tarefa de exemplo incluindo dependências de tarefa dinâmica de acordo com uma modalidade.
[0018] A figura 5 é um fluxograma de processo ilustrando um método de modalidade para programação eficiente de tarefa na presença de conflitos de tarefa.
[0019] A figura 6 é um fluxograma de processo ilustrando um método de modalidade para atribuir dependências de tarefa dinâmica.
[0020] A figura 7 é um fluxograma de processo ilustrando um método de modalidade para substituir um conflito de tarefa com uma dependência de tarefa dinâmica.
[0021] A figura 8 é um fluxograma de processo ilustrando um método de modalidade para substituir um conflito de tarefa com uma dependência de tarefa dinâmica.
[0022] A figura 9 é um diagrama de blocos de componente ilustrando um dispositivo de computação móvel de exemplo adequado para uso com as várias modalidades.
[0023] A figura 10 é um diagrama de blocos de componente ilustrando um dispositivo de computação móvel de exemplo adequado para uso com as várias modalidades.
[0024] A figura 11 é um diagrama de blocos de componente ilustrando um servidor de exemplo adequado para uso com as várias modalidades.
DESCRIÇÃO DETALHADA
[0025] As várias modalidades serão descritas em detalhe com referência aos desenhos em anexo. Onde quer que seja possível, os mesmos números de referência serão usados do início ao fim dos desenhos para se referir a partes iguais ou similares. Referências feitas a exemplos específicos e implementações são para fins ilustrativos e não pretendem limitar o escopo das reivindicações.
[0026] Os termos “dispositivo de computação” e “dispositivo de computação móvel” são usados de modo intercambiável aqui para se referir a qualquer um ou todos os telefones celulares, smartphones, tocadores de multimídia pessoal ou móvel, assistentes de dados pessoais (PDA’s), computadores laptop, computadores tablet, tablets/laptops convertíveis (computadores 2-em-1), smartbooks, ultrabooks, netbooks, computadores palmtop, receptores de correio eletrônico sem fio, telefones celulares habilitados para Internet de multimídia, consoles de jogos móveis, controladores de jogos sem fio e dispositivos eletrônicos pessoais similares que incluem uma memória e um processador programável de múltiplos núcleos. Embora as várias modalidades sejam particularmente uteis para dispositivos de computação móveis, como smartphones, que têm recursos de bateria e memória limitados, as modalidades são em geral úteis em qualquer dispositivo eletrônico que implemente uma pluralidade de dispositivos de memória e um budget de energia limitado no qual a redução do consumo de energia dos processadores pode estender o tempo operacional da bateria de um dispositivo de computação móvel. O termo “dispositivo de computação” pode se referir ainda a dispositivos de computação estacionários incluindo computadores pessoais, computadores de mesa, computadores tudo em um, estações de trabalho, supercomputadores, computadores mainframe, computadores incorporados, servidores, computadores de hometheater, e consoles de jogos.
[0027] As modalidades incluem métodos e sistemas e dispositivos implementando tais métodos para melhorar o desempenho do dispositivo por fornecer execução eficiente de tarefas paralelas usando técnicas de programação que consideram dependências de tarefa e conflitos de tarefa. Os métodos, sistemas e dispositivos podem substituir um conflito de recurso entre tarefas com uma dependência de tarefa dinâmica, assegurando que o acréscimo da dependência de tarefa dinâmica somente ocorre quando uma tarefa possui um recurso sujeito ao conflito de recurso até após o acréscimo da dependência de tarefa dinâmica, e controlando a frequência de reprogramar uma tarefa sujeita a uma dependência de tarefa dinâmica por especificar um limite de conflitos identificados antes da reprogramação.
[0028] Dependências de tarefa impõem uma ordenação a priori de execução de tarefa. Uma dependência t1->t2 (“->” indica uma dependência) específica que a tarefa t1 deve acabar antes da tarefa t2 iniciar a execução, porém não ao contrário. Algumas tarefas podem ser relacionadas através de um “conflito de tarefa”. Um conflito t1=t1 (“=” indica um conflito de tarefa) específica que a tarefa t1 deve terminar antes que a t2 inicie a execução ou a tarefa t2 deve terminar antes que a t1 inicie a execução, porém a execução da tarefa t1 e t2 não devem sobrepor. Em outras palavras, duas tarefas relacionadas por um conflito de tarefa podem ser programadas para execução por um programador de tarefa em qualquer ordem, porém não simultaneamente. Tais conflitos de tarefa se originam tipicamente devido a tarefas que exigem acesso exclusivo a um ou mais recursos compartilhados, que podem incluir qualquer componente físico ou virtual de disponibilidade limitada do dispositivo de computação. Os exemplos de recursos podem incluir componentes de processamento, tempo de processamento, componentes de memória ou armazenagem, locais de memória ou armazenagem, componentes de comunicação interno e externo, largura de banda de comunicação interna e externa, componentes de energia elétrica, energia elétrica, componentes de entrada/saída, sinais de entrada/saída, etc. O compartilhamento de recursos pode ocorrer, por exemplo, quando tarefas gravam simultaneamente para um dispositivo de memória, como um buffer de dados em dois processadores com acesso de memória não sincronizada. Programação de tarefa na presença tanto de dependências de tarefa como conflitos de tarefa é difícil.
[0029] Referências a um recurso específico nas descrições de várias modalidades, incluindo referências a recursos físicos e virtuais, são destinadas a serem exemplos não limitadores. Qualquer recurso do dispositivo de computação pode ser sujeito a qualquer das descrições e exemplos fornecidos aqui e quaisquer recursos físicos ou virtuais de tipos variáveis podem ser substituídos pelos recursos referenciados aqui para fins exemplificadores.
[0030] Como múltiplas tarefas podem compartilhar recursos que não podem ser simultaneamente acessados pelas múltiplas tarefas, as relações de dependência e conflito entre tarefas podem afetar a programação das tarefas. Um conflito de tarefa pode ser modelado como um problema de aquisição de recurso. Como exemplo, considere o conflito de tarefa t1=t1. Esse conflito pode ser modelado como ambas as tarefas exigindo acesso exclusivo a um recurso R. se uma tarefa tiver múltiplos conflitos, então deve adquirir acesso exclusivo a todos os recursos associados àqueles conflitos. Em programação de tarefa convencional sem conflitos, uma tarefa está pronta para execução quando todas as suas dependências foram atendidas.
[0031] Em programação de tarefa com conflitos, o programador de tarefa deve determinar se uma tarefa pronta é capaz de adquirir acesso exclusivo a todos os recursos e executar sem conflitos. Outras tarefas que estão em conflito com a tarefa em consideração devem ser programadas para execução posterior. Para tarefas que tentam acessar simultaneamente o mesmo recurso, uma única tarefa pode ser permitida acessar ou possuir o recurso e se tornar uma tarefa de proprietário. A aquisição de propriedade de um recurso pode ser implementada em vários modos. Em várias modalidades, o recurso pode ser um local mencionado em memória, com os bytes em memória definidos em zero ou nulo para indicar que nenhuma tarefa possui o recurso e os bytes em memória definidos para o endereço da tarefa (ou “ponteiro de tarefa”) para indicar que a tarefa possui o recurso. A aquisição de propriedade do recurso mencionado pode envolver com sucesso verificar atomicamente que o valor armazenado no local de memória do recurso é zero ou nulo, e trocar o valor com o ponteiro de tarefa. Um valor diferente de zero ou nulo armazenado no local de memória do recurso pode indicar que o recurso já é possuído por uma tarefa diferente correspondendo ao valor armazenado. A(s) outra(s) tarefa(s) pode(m) ser impedida(s) de acessar o recurso possuído e reprogramado. A reprogramação pode ser implementada de modo que uma tarefa que tenta acessar um recurso possuído por uma tarefa de proprietário não tenta continuamente acessar o recurso possuído e desperdiçar energia e recursos de processamento por fazer tentativas de acesso repetidas.
[0032] Uma primeira tarefa inicializada (“t1”), tendo uma relação de conflito com uma segunda tarefa (“t2”), pode fazer uma primeira tentativa para acessar um recurso sujeito ao conflito. A primeira tarefa pode ser bem-sucedida em acessar o recurso quando a segunda tarefa já não é a tarefa de proprietário do recurso, tornando a primeira tarefa a tarefa de proprietário do recurso. A primeira tarefa pode ser sem sucesso em acessar o recurso quando a segunda tarefa já é a tarefa de proprietário do recurso. Em resposta à tentativa sem sucesso de acessar o recurso, a relação de conflito entre a primeira tarefa e a segunda tarefa pode ser substituída por uma relação de dependência de tarefa dinâmica t2=>t1 (“=>” indica uma dependência de tarefa dinâmica) especificando que a tarefa t2 deve terminar, desse modo abandonando propriedade do recurso, antes que a tarefa t1 inicie a execução.
[0033] Para evitar a primeira tarefa, e quaisquer tarefas com dependências da primeira tarefa, debilitem em um estado de espera, a adição da dependência de tarefa dinâmica pode ocorrer somente quando a tarefa de proprietário possui o recurso sujeito ao conflito de recurso até após a adição da dependência de tarefa dinâmica. Em uma modalidade, em resposta à determinação de que a segunda tarefa seja a tarefa de proprietário, a segunda tarefa pode ser impedida de terminar até após adição da dependência de tarefa dinâmica t2=>t1. Isso pode ser realizado por exigir que a tarefa de proprietário seja bloqueada para terminar a adição da dependência de tarefa dinâmica, desse modo bloqueando a segunda tarefa até após adição da dependência de tarefa dinâmica t2=>t1, e então desbloqueando a segunda tarefa de modo que a segunda tarefa possa terminar. Em uma modalidade, em resposta á determinação de que a segunda tarefa é a tarefa de proprietário, o estado da segunda tarefa pode ser verificado para determinar se a segunda tarefa terminou antes da adição da dependência de tarefa dinâmica t2=>t1. Qualquer modalidade evita o problema de configurar uma dependência t2=>t1 quando a dependência não mais é necessária e fazendo com que a primeira tarefa espere por um sinal de que a segunda tarefa terminou e que o recurso sujeito ao conflito está disponível, porém não recebendo tal sinal até a próxima vez em que a segunda tarefa executa, ou não recebendo de modo algum tal sinal se a segunda tarefa nunca executar novamente. Isso também evita um efeito de cascata de esperar por tarefas direta ou indiretamente dependentes da primeira tarefa com base na não execução da primeira tarefa.
[0034] O acesso a recursos sujeitos a conflitos para a primeira tarefa com qualquer número de outras tarefas pode ser verificado. Uma dependência de tarefa dinâmica nova pode ser adicionada para a primeira tarefa cada vez que um acesso a um recurso sujeito a um conflito é negado. O acesso a recursos sujeitos a conflitos para a primeira tarefa pode ser verificado para cada tarefa em conflito. A primeira tarefa pode ser reprogramada com base nas dependências dinâmicas adicionadas. Em uma modalidade, um programa para reprogramar tarefas tendo uma dependência de tarefa dinâmica adicionada pode controlar com que frequência a primeira tarefa é reprogramada com base em quantas dependências dinâmicas são adicionadas em uma sessão de verificação. Em outras palavras, um programa limitando o número de dependências dinâmicas recentemente adicionadas para uma tarefa pode interromper o processo de verificar acesso a recursos sujeito a conflitos para a primeira tarefa quando o limite é atingido e a primeira tarefa pode ser reprogramada, mesmo se nem todo o acesso a recursos sujeitos a conflitos foi verificado para todas as tarefas em conflito com a primeira tarefa. O acesso restante a recursos sujeito a conflitos pode ser verificado em tentativas subsequentes para executar a primeira tarefa. O programa pode ser definido para tarefas diferentes e para finalidades diferentes, como fornecer certa quantidade de latência de tarefa e/ou consumo de recurso.
[0035] A adição simples de bordas de dependência dinâmica pode criar ciclos em um gráfico previamente não cíclico. Deadlocks podem ser criados quando múltiplas tarefas tentam simultaneamente adquirir múltiplos recursos. Por exemplo, a primeira tarefa pode tentar adquirir recursos, como um primeiro recurso (“R1”) e um segundo recurso (“R2”), em ordem R1 e R2 enquanto simultaneamente a segunda tarefa está tentando adquirir R2 e R1. Cada tarefa pode esperar pela disponibilidade de um recurso possuído pela outra tarefa causando um deadlock de tarefas esperando para adquirir recursos. Ambos os deadlocks durante aquisição de recurso e as dependências cíclicas podem ser evitados por diversos métodos. Em várias modalidades, recursos para uma tarefa podem ser sempre processados em uma ordem canônica, por exemplo, ordem separada de endereços de ponteiro dos tratamentos de recurso correspondentes para R1 e R2, ou em ordem separada de identificadores de recurso exclusivos (IDs) atribuídos a cada recurso. Em várias modalidades, técnicas de detecção e recuperação de deadlock podem ser usadas.
[0036] A figura 1 ilustra um sistema incluindo um dispositivo de computação 10 em comunicação com um dispositivo de computação remoto 50 adequado para uso com as várias modalidades. O dispositivo de computação 10 pode incluir um sistema em chip (SoC) 12 com um processador 14, uma memória 16, uma interface de comunicação 18 e uma interface de memória de armazenagem 20. O dispositivo de computação pode incluir ainda um componente de comunicação 22 como um modem cabeado ou sem fio, uma memória de armazenagem 24, uma antena 26 para estabelecer uma conexão sem fio 32 com uma rede sem fio 30 e/ou a interface de rede 28 para conecta-se com uma conexão cabeada 44 à Internet 40. O processador 14 pode incluir qualquer de uma variedade de núcleos de hardware, por exemplo, diversos núcleos de processador.
[0037] O termo “sistema em chip” (SoC) é usado aqui para se referir a um conjunto de circuitos eletrônicos interconectados tipicamente, porém não exclusivamente, incluindo um núcleo de hardware, uma memória e uma interface de comunicação. Um núcleo de hardware pode incluir uma variedade de tipos diferentes de processadores, como um processador de propósito geral, uma unidade de processamento central (CPU), um processador de sinais digitais (DSP), uma unidade de processamento gráfico (GPU), uma unidade de processamento acelerado (APU), um processador auxiliar, um processador de núcleo único, e um processador de múltiplos núcleos. Um núcleo de hardware pode incorporar ainda outro hardware e combinações de hardware, como uma disposição de porta programável em campo (FPGA), um circuito integrado de aplicação específica (ASIC), outro circuito lógico programável, lógica de porta discreta, lógica de transistor, hardware de monitoramento de desempenho, hardware de vigilância e referências de tempo. Circuitos integrados podem ser configurados de modo que os componentes dos circuitos integrados residam em uma única peça de material semicondutor, como silício. O SoC 12 pode incluir um ou mais processadores 14. O dispositivo de computação 10 pode incluir mais de um SoCs 12, desse modo aumentando o número de processadores 14 e núcleos de processador. O dispositivo de computação 10 pode incluir também processadores 14 que não são associados a um SoC 12. Processadores individuais 14 podem ser processadores de múltiplos núcleos como descrito abaixo com referência à figura 2. Os processadores 14 podem ser individualmente configurados para finalidades específicas que podem ser iguais a ou diferentes de outros processadores 14 do dispositivo de computação 10. Um ou mais dos processadores 14 e núcleos de processador de configurações iguais ou diferentes podem ser agrupados juntos. Um grupo de processadores 14 ou núcleos de processador podem ser mencionados como cluster de múltiplos processadores.
[0038] A memória 16 do SoC 12 pode ser uma memória volátil ou não volátil configurada para armazenar dados e código executável por processador para acesso pelo processador 14. O dispositivo de computação 10 e/ou SoC 12 pode incluir uma ou mais memórias 16 configuradas para várias finalidades. Em uma modalidade, uma ou mais memórias 16 podem incluir memórias voláteis como memória de acesso aleatório (RAM) ou memória principal, ou memória cache. Essas memórias 16 podem ser configuradas para reter temporariamente uma quantidade limitada de dados recebidos de um sensor de dados ou subsistema, dados e/ou instruções de código executáveis por processador que são solicitadas da memória não volátil, carregadas nas memórias 16 a partir da memória não volátil em antecipação de acesso futuro com base em uma variedade de fatores, e/ou dados de processamento intermediário e/ou instruções de código executáveis por processador produzidas pelo processador 14 e temporariamente armazenadas para acesso rápido futuro sem serem armazenados em memória não volátil.
[0039] A memória 16 pode ser configurada para armazenar dados e código executável por processador, pelo menos temporariamente, que é carregado na memória 16 a partir de outro dispositivo de memória, como outra memória 16 ou memória de armazenagem 24, para acesso por um ou mais dos processadores 14. Os dados ou código executável por processador carregado na memória 16 pode ser carregado em resposta á execução de uma função pelo processador 14. O carregamento de dados ou código executável por processador na memória 16 em resposta à execução de uma função pode resultar de uma solicitação de acesso de memória à memória 16 que não é bem sucedida, ou uma falta, porque os dados solicitados ou código executável por processador não são localizados na memória 16. Em resposta a uma miss, uma solicitação de acesso de memória para outra memória 16 ou memória de armazenagem 24 pode ser feita carregar os dados solicitados ou código executável por processador a partir da outra memória 16 ou memória de armazenagem 24 para o dispositivo de memória 16. O carregamento dos dados ou código executável por processado na memória 16 em resposta à execução de uma função pode resultar de uma solicitação de acesso de memória à outra memória 16 ou memória de armazenagem 24 e os dados ou código executável por processador podem ser carregados na memória 16 para acesso posterior.
[0040] A interface de comunicação 18, componente de comunicação 22, antena 26, e/ou interface de rede 28 podem funcionar em união para permitir que o dispositivo de computação 10 comunique através de uma rede sem fio 30 através de uma conexão sem fio 32 e/ou uma rede cabeada 44 com o dispositivo de computação remoto 50. A rede sem fio 30 pode ser implementada usando uma variedade de tecnologias de comunicação sem fio, incluindo, por exemplo, espectro de radiofrequência usado para comunicação sem fio, para fornecer ao dispositivo de computação 10 uma conexão com a Internet 40 pela qual pode permutar dados com o dispositivo de computação remoto 50.
[0041] A interface de memória de armazenagem 20 e a memória de armazenagem 24 podem funcionar em união para permitir que o dispositivo de computação 10 armazene dados e código executável por processador em uma mídia de armazenagem não volátil. A memória de armazenagem 24 pode ser configurada bem semelhante a uma modalidade da memória 16 na qual a memória de armazenagem 24 pode armazenar os dados ou código executável por processador para acesso por um ou mais dos processadores 14. A memória de armazenagem 24, sendo não volátil, pode reter as informações mesmo após a energia do dispositivo de computação 10 ter sido desligada. Quando a energia é ligada novamente e o dispositivo de computação 10 reinicializa, as informações armazenadas na memória de armazenagem 24 podem estar disponíveis para o dispositivo de computação 10. A interface de memória de armazenagem 20 pode controlar acesso à memória de armazenagem 24 e permitir que o processador 14 leia dados de e grave dados para a memória de armazenagem 24.
[0042] Alguns ou todos os componentes do dispositivo de computação 10 podem ser diferentemente dispostos e/ou combinados enquanto ainda servindo as funções necessárias. Além disso, o dispositivo de computação 10 pode não ser limitado a um de cada dos componentes e múltiplas instâncias de cada componente podem ser incluídas em várias configurações do dispositivo de computação 10.
[0043] A figura 2 ilustra um processador de múltiplos núcleos 14 adequado para implementar várias modalidades. O processador de múltiplos núcleos 14 pode ter uma pluralidade de núcleos de processador homogêneos ou heterogêneos 200, 201, 202, 203. Os núcleos de processador 200, 201, 202, 203 podem ser homogêneos em que os núcleos de processador 200, 201, 202, 203 de um único processador 14 podem ser configurados para a mesma finalidade e ter características de desempenho iguais ou similares. Por exemplo, o processador 14 pode ser um processador de propósito geral, e os núcleos de processador 200, 201, 202, 203 podem ser núcleos de processador de propósito geral homogêneos. Alternativamente, o processador 14 pode ser uma unidade de processamento gráfico ou um processador de sinais digitais, e os núcleos de processador 200, 201, 202, 203 podem ser núcleos de processador gráfico homogêneos ou núcleos de processador de sinais digitais, respectivamente. Para facilidade de referência, os termos “processador” e “núcleo de processador” podem ser usados de modo intercambiável aqui.
[0044] Os núcleos de processador 200, 201, 202, 203 podem ser heterogêneos em que os núcleos de processador 200, 201, 202, 203 de um processador único 14 podem ser configurados para diferentes propósitos e/ou ter características de desempenho diferentes. A heterogeneidade de tais núcleos de processador heterogêneos pode incluir arquiteturas de conjunto de instruções diferentes, pipelines, frequências de operação, etc. Um exemplo de tais núcleos de processador heterogêneos pode incluir o que são conhecidos como arquiteturas “big.LITTLE” em que núcleos de processador de baixa potência, mais lentos podem ser acoplados a núcleos de processador famintos de energia e mais potentes. Em modalidades similares, o SoC 12 pode incluir diversos processadores homogêneos ou heterogêneos 14.
[0045] No exemplo ilustrado na figura 2, o processador de múltiplos núcleos 14 inclui quatro núcleos de processador 200, 201, 202, 203 (isto é, núcleo de processador 0, núcleo de processador 1, núcleo de processador 2, e núcleo de processador 3). Para facilidade de explicação, os exemplos da presente invenção podem se referir aos quatro núcleos de processador 200, 201, 202, 203 ilustrados na figura 2. Entretanto, os quatro núcleos de processador 200, 201, 202, 203 ilustrados na figura 2 e descritos aqui são meramente fornecidos como exemplo e de modo algum pretendem limitar as várias modalidades a um sistema de processador de quatro núcleos. O dispositivo de computação 10, o SoC 12 ou o processador de múltiplos núcleos 14 pode individualmente ou em combinação incluir um número menor ou maior que os quatro núcleos de processador 200, 201, 202, 203 ilustrados e descritos aqui.
[0046] As figuras 3A-3D ilustram um gráfico de tarefa de exemplo em várias configurações de gráfico de tarefa 300a-300e. o gráfico de tarefa em várias configurações de gráfico de tarefa 300a-300e, incluindo tarefas 302a-302d, tarefas 304a-304c, bordas de dependência de tarefa (indicadas pelas setas entre as tarefas diferentes 302a-302d e 304a), bordas de conflito de tarefa 306a e 306b, e bordas de dependência de tarefa dinâmica 308a-308c, são meramente exemplificadoras, e podem ser configuradas com números variáveis de tarefas e relações variáveis entre tarefas.
[0047] A figura 3A ilustra a configuração de gráfico de tarefa de exemplo 300a tendo as tarefas 302a- 302d e 304a relacionadas entre si por bordas de dependência de tarefa. Em outras palavras, uma tarefa depende de outra tarefa de modo que a tarefa dependente não pode executar antes que a tarefa da qual a tarefa dependente depende. Por exemplo, a tarefa 302b depende da tarefa 302a, desse modo a tarefa 302b não pode executar antes que a tarefa 302a complete a execução. Em um modo similar, a tarefa 304a também depende da tarefa 302a, a tarefa 302c depende da tarefa 302b e a tarefa 302d depende da tarefa 302c e da tarefa 304b. a configuração de gráfico de tarefa 300a também inclui as tarefas 304a-304c relacionadas entre si pelas bordas de conflito de tarefa 306a e 306b. em outras palavras, uma tarefa não depende de outra tarefa em que duas ou mais tarefas que estão em conflito entre si podem executar em qualquer ordem, entretanto duas tarefas questão em conflito entre si podem não executar simultaneamente. As bordas de conflito 302a e 302b entre as tarefas 304a-304c podem representar que tarefas que estão em conflito entre si podem exigir acesso ao mesmo recurso para executar. Como tal, nesse exemplo a tarefa 304a e a tarefa 304b podem exigir o mesmo recurso para executar e podem não executar simultaneamente. Similarmente, a tarefa 304b e a tarefa 304c podem exigir o mesmo recurso para executar e podem não executar simultaneamente.
[0048] Em várias modalidades, um programador de tarefa (não mostrado) pode substituir uma borda de conflito de tarefa com uma borda de dependência de tarefa dinâmica. A substituição da borda de conflito de tarefa com uma borda de dependência de tarefa dinâmica pode incluir relacionar as tarefas em uma estrutura de dados para gerenciar as relações entre tarefas. Relacionar as tarefas na estrutura de dados pode incluir adicionar a tarefa á estrutura de dados de modo que sua colocação na estrutura de dados conote sua relação, ou atualizar uma estrutura de dados de modo que entradas existentes sejam alteradas para indicar uma relação nova entre as tarefas. O fato de se uma borda de conflito de tarefa é substituída por uma borda de dependência de tarefa dinâmica pode depender de se uma tarefa associada a uma borda de conflito de tarefa é uma tarefa pronta e se um ou mais recursos associados à borda de conflito de tarefa está disponível para uso pela tarefa pronta ou é possuído por uma tarefa relacionada a conflito de tarefa.
[0049] Tipicamente, para uma tarefa pronta falhando em adquirir um recurso já possuído, um thread e/ou processador atribuído para executar a tarefa pronta giraria, continuamente tentando adquirir o recurso até ser bem sucedido, o que pode levar múltiplas tentativas antes da aquisição, uso de energia, processamento e recursos de largura de banda do dispositivo de computação com cada tentativa. O programador pode rastrear as relações entre as tarefas. O programador pode permitir que o thread e/ou processador atribuído para executar a tarefa pronta fique inativo ou trabalhe em outras tarefas prontas não relacionadas, desde que a borda de dependência de tarefa dinâmica persista. Após conclusão, a tarefa de propriedade de recurso pode sinalizar o programador e o programador pode remover a borda de dependência de tarefa dinâmica e sinalizar o thread e/ou processador atribuído para executar a tarefa pronta para ativar de modo que possa tentar adquirir o recurso abandonado pela tarefa concluída.
[0050] Em várias modalidades, a tarefa pronta pode se relacionar a múltiplas outras tarefas através de dependências de borda dinâmica, e o programador pode permitir que a tarefa pronta adquirira os recursos exigidos á medida que os recursos exigidos se tornam disponíveis ou pode permitir somente que a tarefa pronta adquira os recursos exigidos quando todos os recursos exigidos são disponíveis. A disponibilidade de recursos pode ser rastreada usando várias técnicas. Em várias modalidades, o recurso pode ser um local denominado na memória, com os bytes em memória definidos em zero ou nulo para indicar que nenhuma tarefa possui o recurso e os bytes na memória definidos para o endereço da tarefa (ou “ponteiro de tarefa”) para indicar que a tarefa possui o recurso. A aquisição de propriedade do recurso denominado pode envolver verificar atomicamente que o valor armazenado no local de memória do recurso seja zero ou nulo e trocar o valor com o ponteiro de tarefa. Um valor diferente de zero ou nulo armazenado no local de memória do recurso pode indicar que o recurso já é possuído por uma tarefa diferente correspondendo ao valor armazenado. Deadlocks podem ser causados por bordas de dependência dinâmica cíclica resultando na primeira tarefa esperando para adquirir recursos possuídos pela segunda tarefa que está esperando para adquirir recursos possuídos pela primeira tarefa. Para evitar tais deadlocks, em várias modalidades, os recursos para uma tarefa podem ser sempre processados em uma ordem canônica, por exemplo, ordem separada de endereços de ponteiro dos tratamentos de recurso correspondentes para os recursos, ou em ordem separada de identificadores de recursos exclusivos (IDs) atribuídos a cada recurso. Em várias modalidades, técnicas de detecção e recuperação de deadlock podem ser usadas. Em outras palavras, um deadlock e uma dependência de tarefa dinâmica cíclica podem ser evitados por exigir que os recursos necessários para execução da primeira tarefa sejam processados em uma ordem relacionada a pelo menos um outro recurso exigido para execução de outra tarefa.
[0051] A figura 3B ilustra a configuração de gráfico de tarefa de exemplo 300b tendo a mesma configuração que a configuração de gráfico de tarefa 300a, descrita com referência à figura 3A, com a exceção de que a borda de dependência de tarefa dinâmica 308a tenha substituído a borda de conflito de tarefa 306a. nesse exemplo, a tarefa 304a pode ser uma tarefa pronta. Como tal, a tarefa 302a pode ter concluído a execução, satisfazendo a dependência da tarefa 304a a partir da tarefa 302a. Para executar a tarefa 304a, um thread para executar a tarefa 304a, implementado por um dos processadores ou núcleos de processador do dispositivo de computação, pode tentar e ter sucesso em adquirir um recurso exigido para executar a tarefa 304a. como descrito aqui, a borda de conflito de tarefa 306a entre a tarefa 304a e a tarefa 304b indica que ambas as tarefas 304a e 304b exigem o mesmo recurso para executar.
[0052] Em algumas circunstâncias, a tarefa 304b pode ser também uma tarefa pronta, e um thread para executar a tarefa 304b pode falhar em adquirir o recurso que ambas as tarefas 304a e 304b exigem para executar. Um programador de tarefa ou outro módulo do dispositivo de computação pode determinar que o recurso que ambas as tarefas 304a e 304b exigem para executar já seja possuído pela tarefa 304a. Portanto, a tarefa 304b não será capaz de executar até que a tarefa 304a abandone propriedade do recurso. Nessa situação, o programador de tarefa do dispositivo de computação pode substituir a borda de conflito 306a entre a tarefa 304a e a tarefa 304b com a borda de dependência de tarefa dinâmica 308a. alterar a borda de conflito 306a para a borda de dependência de tarefa dinâmica 308a pode significar que a tarefa 304b agora é dependente da conclusão da tarefa 304a, desse modo abandonando o recurso exigido para a tarefa 304b executar. Adicionar a borda de dependência de tarefa dinâmica 308a pode significar que o thread para executar a tarefa 304b que o thread pode estar inativo, ou trabalhar em outras tarefas prontas não relacionadas, até ser notificado que a borda de dependência de tarefa dinâmica 308a é removida, indicando que a tarefa 304a concluiu a execução e abandonou o recurso exigido para a tarefa 304b executar. Nesse exemplo, a tarefa 304c pode executar independente de se a tarefa 304a possui o recurso.
[0053] A figura 3C ilustra a configuração de gráfico de tarefa de exemplo 300c tendo a mesma configuração que a configuração de gráfico de tarefa 300a, descrita com referência à figura 3A, com a exceção de que a borda de dependência de tarefa dinâmica 308a substituiu a borda de conflito de tarefa 306a, e a borda de dependência de tarefa dinâmica 308b substituiu a borda de conflito de tarefa 306b. a configuração de gráfico de tarefa 300c ilustra um exemplo similar ao exemplo da configuração de gráfico de tarefa 300b descrita com referência á figura 3B. isto é, que cada das bordas de dependência de tarefa dinâmica 308a e 308b pode relacionar suas tarefas respectivas 304a-304c dependendo de recursos diferentes exigidos por suas tarefas respectivas 304a-304c. Em outras palavras, a configuração de gráfico de tarefa de exemplo 300c pode aplicar o processo de determinar a borda de dependência de tarefa dinâmica 308a entre as tarefas 304a e 304b para um primeiro recurso, e a borda de dependência de tarefa dinâmica 308b entre as tarefas 304b e 304c para um segundo recurso. Como resultado, as bordas de dependência de tarefa dinâmica 308a e 308b não podem depender uma da outra. Entretanto, nesse exemplo, a execução das tarefas 304a-304c podem ser de fato dependentes entre si. Apesar das tarefas 304a e 304c não exigirem os mesmos recursos, a tarefa 304c pode ser dinamicamente dependente da tarefa 304b, que pode ser dinamicamente dependente da tarefa 304a. Portanto, a tarefa 304c pode não ser capaz de executar até após a tarefa 304b, e a tarefa 304b pode não ser capaz de executar até após a tarefa 304a.
[0054] A configuração de gráfico de tarefa 300c ilustra um exemplo no qual cada das tarefas 304a-304c requer o mesmo recurso para executar. Em várias modalidades em tais circunstâncias, a substituição da borda de conflito de tarefa 306a com a borda de dependência de tarefa dinâmica 308a pode ocorrer em um modo similar ao exemplo da configuração de gráfico de tarefa 300b descrita com referência á figura 3B. além disso, o programador pode determinar que a tarefa 304c pode exigir que o mesmo recurso execute como o recurso sujeito à borda de dependência de tarefa dinâmica 308a. para evitar uma condição de corrida para o recurso abandonado pela tarefa 304a e exigido pelas tarefas 304b e 304c, o programador de tarefa implementando várias modalidades pode priorizar uma ordem de execução as tarefas 304b e 304c por substituir a borda de conflito de tarefa 306b com a borda de dependência de tarefa dinâmica 308b. desse modo, a tarefa 304b pode ser notificada da disponibilidade do recurso abandonado pela tarefa 304a enquanto a tarefa 304c permanece inativa, ou funciona em outras tarefas prontas não relacionadas, e a tarefa 304c pode ser notificada da disponibilidade do recurso após ser abandonada pela tarefa 304b.
[0055] A figura 3D ilustra uma configuração de gráfico de tarefa de exemplo 300d tendo a mesma configuração que a configuração de gráfico de tarefa 300a descrita com referência á figura 3A, com a exceção de que a borda de dependência de tarefa dinâmica 308b substituiu a borda de conflito de tarefa 306b. A configuração de gráfico de tarefa 300d ilustra um exemplo similar ao exemplo da configuração de gráfico de tarefa 300b descrita com referência á figura 3B. isto é, na configuração de gráfico de tarefa de exemplo 300d, a tarefa 304b é a tarefa pronta que adquire o recurso exigido pelas tarefas 304b e 304c. A tarefa 304c falha em adquirir o recurso que requer para executar porque é possuído pela tarefa 304b, de modo que o programador de tarefa de acordo com várias modalidades substitui a borda de conflito de tarefa 306b com a borda de dependência de tarefa 308b. um thread e/ou processador para executar a tarefa 304c é permitido ficar inativo, ou trabalhar em outras tarefas prontas não relacionadas, enquanto a tarefa 304b executa e é sinalizada para adquirir o recurso abandonado pela tarefa 304b após concluir a execução. Nesse exemplo, a tarefa 304a pode executar independente de se a tarefa 304b possui o recurso.
[0056] As figuras 4A-4D ilustram um gráfico de tarefa de exemplo em várias configurações de gráfico de tarefa 400a-400d. O gráfico de tarefa e suas várias configurações de gráfico de tarefa 400a-400d, incluindo as tarefas 302a-302d, as tarefas 304a-304c, as bordas de dependência de tarefa (indicadas pelas setas entre as tarefas diferentes 302a-302d e 304a, e incluindo uma borda de dependência de tarefa 402), as bordas de conflito de tarefa 306a e 306b, e as bordas de dependência de tarefa dinâmica 308a e 308b, são meramente exemplificadoras e podem ser configuradas com números variáveis de tarefas e relações variáveis entre tarefas.
[0057] A figura 4A ilustra uma configuração de gráfico de tarefa de exemplo 400a tendo a mesma estrutura que a configuração de gráfico de tarefa 300a descrita com referência á figura 3A, com a adição da borda de dependência de tarefa 402 entre as tarefas 304a e 304c. Como tal, a configuração de gráfico de tarefa 400a inclui características que são similares à configuração de gráfico de tarefa 300a, exceto que a tarefa 304c depende da tarefa 304a, e desse modo a tarefa 304c não pode executar antes da tarefa 304a.
[0058] A figura 4B ilustra uma configuração de gráfico de tarefa de exemplo 400b tendo a mesma estrutura que a configuração de gráfico de tarefa 300b descrita com referência á figura 3B, com a adição da borda de dependência de tarefa 402 entre as tarefas 304a e 304c. A execução das tarefas 304a e 304b pode estar sujeita ao mesmo exemplo como descrito para a configuração de gráfico de tarefa 300b. A execução da tarefa 304c pode ser não afetada pela substituição da borda de conflito de tarefa 306a com a borda de dependência de tarefa dinâmica 308a. Entretanto, nesse exemplo a borda de dependência de tarefa dinâmica 308a entre as tarefas 304a e 304b é invertida de modo que a tarefa 304b seja a primeira a adquirir o recurso exigido para executar as tarefas 304a e 304b. desse modo, a tarefa 304c pode se tornar de fato dependente da tarefa 304b através da tarefa 304a.
[0059] A figura 4C ilustra uma configuração de gráfico de tarefa de exemplo 400c tendo a mesma estrutura que a configuração de gráfico de tarefa 300c descrita com referência á figura 3C, com a adição da boda de dependência de tarefa 402 entre as tarefas 304a e 304c. A execução das tarefas 304a e 304b pode ser sujeita ao mesmo exemplo como descrito para a configuração de gráfico de tarefa 300c. Além disso, a tarefa 304c pode ser agora dependendo da tarefa 304a e dinamicamente dependente da tarefa 304b independente de se o recurso sujeito às bordas de execução de tarefa dinâmica 308a e 308b for igual ou não. Entretanto, abandonar um primeiro recurso exigido para executar a tarefa 304c pela tarefa 304a pode ser insuficiente para executar a tarefa 304c, apesar de depender diretamente da tarefa 304a, porque um segundo recurso exigido para executar a tarefa 304c pode ser possuído pela tarefa 304b. Em várias modalidades, o programador pode ativar o thread e/ou processador para executar a tarefa 304c para adquirir o primeiro recurso abandonado pela tarefa 304a. Em várias modalidades, o programador pode permitir que o thread e/ou processador para executar a tarefa 304c retorne a inativo enquanto espera que o segundo recurso seja abandonado pela tarefa 304b. Em várias modalidades, o programador pode ativar o thread e/ou processador para executar a tarefa 304c somente quando tanto o primeiro como o segundo recursos são abandonados pelas tarefas 304a e 304b. Em várias modalidades, esperar para ativar o thread e/ou processador para executar a tarefa 304c somente quanto tanto o primeiro como o segundo recursos estão disponíveis pode ser implementado quando outra tarefa requer um do primeiro ou segundo recurso para executar.
[0060] Em algumas situações, o mesmo recurso pode estar sujeito à borda de dependência de tarefa dinâmica 308a e a borda de dependência 402. Para evitar uma condição de corrida para o recurso abandonado pela tarefa 304a e exigido pelas tarefas 304b e 304c, o programador de tarefa implementando várias modalidades pode priorizar uma ordem de execução das tarefas 304b e 304c. desse modo, a tarefa de prioridade mais alta pode ser notificada sobre a disponibilidade do recurso abandonado pela tarefa 304a enquanto a tarefa de prioridade mais baixa permanece inativa, ou trabalha em outras tarefas prontas não relacionadas, e a tarefa de prioridade mais baixa pode ser notificada sobre a disponibilidade do recurso após ser abandonado pela tarefa de prioridade mais alta. Em várias modalidades, o programador de tarefa pode priorizar as bordas de dependência de tarefa dinâmica 308a e 308b em relação à borda de dependência 402, de tal modo que o programador de tarefa possa adicionar a borda de dependência de tarefa dinâmica 308b de modo que a tarefa 304b adquira o recurso sujeito a seu conflito de tarefa com a tarefa 304c e executa antes da tarefa 304c.
[0061] A figura 4D ilustra a configuração de gráfico de tarefa de exemplo 400d tendo a mesma estrutura que a configuração de gráfico de tarefa 300d descrita com referência à figura 3D, com a adição da borda de dependência de tarefa 402 entre as tarefas 304a e 304c. A execução das tarefas 304a e 304b pode ser sujeita ao mesmo exemplo como descrito para a configuração de gráfico de tarefa 300d. Como descrito na configuração de gráfico de tarefa de exemplo 400c com referência á figura 4C, o programador pode priorizar a execução das tarefas 304b e 304c usando a borda de dependência de tarefa dinâmica 308b. Como tal, apesar da disponibilidade do primeiro recurso abandonado pela tarefa 304a, a execução da tarefa 304c pode ser retardada até conclusão da tarefa 304b porque a borda de dependência de tarefa dinâmica 308b pode orientar o programador de tarefa a permitir que a tarefa 304b adquira o segundo recurso antes da tarefa 304c.
[0062] A figura 5 ilustra um método de modalidade 500 para programação de tarefa na presença de conflitos de tarefa. O método 500 pode ser implementado em um dispositivo de computação em software executando em um processador, em hardware de propósito geral ou hardware dedicado, e pode ser implementado como um programador de tarefa em qualquer tal configuração. Em várias modalidades, o método 500 pode ser implementado por múltiplos threads em múltiplos processadores ou componentes de hardware.
[0063] No bloco de determinação 502, o dispositivo de computação (por exemplo, um programador de tarefa implementado no dispositivo de computação) pode determinar se uma tarefa t é uma tarefa pronta. Para determinar se a tarefa t é uma tarefa pronta, o dispositivo de computação pode determinar se a tarefa t é uma tarefa pronta, o dispositivo de computação pode determinar se a tarefa t é dependente de quaisquer outras tarefas. Em algumas modalidades, o dispositivo de computação pode determinar se a tarefa t é incluída em uma estrutura de dados indicando uma dependência e/ou dependência dinâmica de outra tarefa. Isso pode incluir analisar uma entrada única ou múltiplas entradas em uma estrutura de dados única ou múltiplas estruturas de dados. Cada tal estrutura de dados pode ser dedicada a uma relação de tarefa específica ou pode incluir múltiplos tipos de relações de tarefa. Uma determinação de que a tarefa t é entrada como dependente de outra tarefa pode indicar que a tarefa t não é uma tarefa pronta. Uma determinação de que a tarefa t é entrada como não sendo dependente de outra tarefa ou não é entrada na estrutura de dados pode indicar que a tarefa t não é dependente de outra tarefa, e é, portanto, uma tarefa pronta.
[0064] Em resposta à determinação de que a tarefa t não é uma tarefa pronta (isto é, bloco de determinação 502 - “Não”), o dispositivo de computação pode continuar a verificar se a tarefa t é uma tarefa pronta no bloco de determinação 502.
[0065] Em resposta à determinação de que a tarefa t é uma tarefa pronta (isto é, bloco de determinação 502 = “Sim”), o dispositivo de computação pode determinar se a tarefa t tem um conflito de tarefa com uma tarefa tj no bloco de determinação 504. Como descrito adicionalmente com referência à figura 6, a determinação de se a tarefa t tem um conflito com outra tarefa pode ser implementada para diversas tarefas. Similar à determinação de se a tarefa t é dependente de outra tarefa, o dispositivo de computação pode analisar uma estrutura de dados para determinar se a tarefa t tem um conflito com a tarefa tj, procurando entradas indicando o conflito entre a tarefa t e a tarefa tj. Em várias modalidades, as estruturas de dados podem ser configuradas para indicar uma relação de conflito ou podem indicar os recursos exigidos por cada tarefa e os recursos exigidos podem ser comparados para determinar se um conflito existe. Por exemplo, duas tarefas que exigem pelo menos um mesmo recurso podem ter um conflito entre si.
[0066] Em resposta à determinação de que a tarefa t não tem um conflito com a tarefa tj (isto é, bloco de determinação 504 = “Não”), o dispositivo de computação pode adquirir o(s) recurso(s) exigido(s) para a tarefa t executar no bloco 512. Por exemplo, um bloqueio pode ser colocado no recurso exigido de modo que nenhuma outra tarefa possa acessar a tarefa enquanto a tarefa t executa. Em várias modalidades, a aquisição do recurso pode não exigir acesso exclusivo ao recurso, e o recurso pode ser compartilhado por outras tarefas, como quando acesso somente de leitura é exigido, ou parte diferente do recurso é acessada. No bloco 514, o dispositivo de computação pode executar a tarefa t usando o recurso adquirido.
[0067] Em resposta à determinação de que a tarefa t não tem um conflito com a tarefa tj (isto é, bloco de determinação 504 = “Sim”), o dispositivo de computação pode tentar adquirir os recursos, incluindo o recurso sujeito ao conflito de tarefa, para executar a tarefa t no bloco 506. O dispositivo de computação pode tentar adquirir os recursos em um modo similar àquele descrito para o bloco 512. Em várias modalidades, tentar adquirir os recursos pode usar o rastreamento de disponibilidade de recurso e/ou técnicas de prevenção de deadlock descritas com referência á figura 3A. em várias modalidades, o dispositivo de computação pode verificar a disponibilidade dos recursos antes de adquirir os recursos. Para recursos que são disponíveis, o dispositivo de computação pode adquirir os recursos e para recursos que são indisponíveis, o dispositivo de computação pode pular a aquisição de recursos. em várias modalidades, o dispositivo de computação pode adquirir recursos disponíveis individuais quando os recursos individuais são disponíveis ou pode adquirir somente recursos quando um conjunto ou todos os recursos exigidos são disponíveis.
[0068] No bloco de determinação 508, o dispositivo de computação pode determinar se a tarefa t adquire os recursos, incluindo o recurso sujeito ao conflito de tarefa, para executar a tarefa t. O dispositivo de computação pode falhar em adquirir qualquer dos recursos exigidos para executar a tarefa t quando outras tarefas têm propriedade do recurso que não permite que a tarefa t assuma propriedade exclusiva ou compartilhada do recurso, dependendo das necessidades da tarefa t para execução. Em várias modalidades, as determinações referentes a se a tarefa t adquire os recursos podem incluir receber sinais a partir da tarefa indicando aquisição dos recursos, ou usar o rastreamento de disponibilidade de recurso por verificar o endereço da tarefa (ou “ponteiro de tarefa”) definido nos bytes na memória para o recurso.
[0069] Em resposta à determinação de que o dispositivo de computação falhou em adquirir os recursos, incluindo o recurso sujeito ao conflito de tarefa, para executar a tarefa t (isto é, bloco de determinação 508 = “Não”), o dispositivo de computação pode atribuir uma borda de dependência de tarefa dinâmica a partir da tarefa tj para a tarefa t no bloco 510. Em outras palavras, o dispositivo de computação pode tornar a tarefa t dinamicamente dependente da tarefa tj, exigindo que a tarefa tj abandone uma necessidade de recurso para execução da tarefa t antes que a tarefa t possa ser executada. A atribuição da borda de dependência de tarefa dinâmica a partir da tarefa tj para a tarefa t é descrita adicionalmente com referência à figura 6.
[0070] Em resposta à determinação de que o dispositivo de computação adquiriu os recursos, incluindo o recurso sujeito ao conflito de tarefa, para executar a tarefa t (isto é, bloco de determinação 508 = “Sim”), o dispositivo de computação pode executar a tarefa t usando o recurso adquirido no bloco 514.
[0071] A figura 6 ilustra um método de modalidade 600 para atribuir dependências de tarefa dinâmica. O método 600 pode ser implementado em um dispositivo de computação em software executando em um processador, em hardware de propósito geral, ou hardware dedicado, e pode ser implementado como um programador de tarefa em qualquer tal configuração. Em várias modalidades, o método 600 pode ser implementado por múltiplos threads em múltiplos processadores ou componentes de hardware. Em várias modalidades, o método 600 pode ser implementado como parte do bloco 510, como descrito com referência à figura 5.
[0072] No bloco de determinação 602, o dispositivo de computação (por exemplo, um programador de tarefa executando no dispositivo de computação) pode determinar se uma política de conflito é atendida. Em várias modalidades, a política de conflito pode determinar quantas bordas de dependência de tarefa dinâmica atribuir à tarefa t por sessão de atribuição. Em outras palavras, a política de conflito pode interromper a sessão de atribuição em resposta a certo número de bordas de dependência de tarefa dinâmica sendo atribuído à tarefa t independente de se outras tarefas ainda a serem analisadas em relação a conflito com a tarefa t permanecem. O programa de tarefa pode ser definido dependendo de vários fatores, como latência de tarefa, consumo de energia, e criticidade de tarefa. Por exemplo, para aumentar a latência de tarefa, o programa pode aumentar o número de bordas de dependência de tarefa dinâmica sendo atribuídas à tarefa t, e pode diminuir o número de bordas de dependência de tarefa dinâmica para diminuir a latência de tarefa. A determinação de se a política de conflito é atendida também pode ser baseada em tempo, número de execuções de outras tarefas, ciclos de processador e outras métricas.
[0073] A latência de tarefa pode ser relacionada ao número de bordas de dependência de tarefa dinâmica porque quanto mais tarefas que a tarefa t tem de esperar para terminar antes de tentar adquirir os recursos exigidos, mais tempo pode demorar para fazer isso. Similarmente, menos bodas de dependência de tarefa dinâmica podem permitir que a tarefa t tente adquirir os recursos exigidos mais frequentemente, e, portanto, potencialmente mais cedo. Em outro exemplo, a relação de consumo de energia com o número de bordas de dependência de tarefa dinâmica pode ser inversamente relacionada à latência. Quanto menos bordas de dependência de tarefa dinâmica, mais frequentemente a tarefa t tenta adquirir a tarefa exigida, desse modo menos tempo inativo e mais ativo para o thread e/ou processador atribuído para executar a tarefa t. Em outro exemplo, quanto mais alta a criticidade da tarefa, menos bordas de dependência de tarefa dinâmica podem ser atribuídas de modo que a tarefa possa executar potencialmente mais contemporaneamente com um período crítico para execução.
[0074] Em resposta à determinação de que a política de conflito é atendido (isto é, bloco de determinação 602 = “Sim”), o dispositivo de computação pode determinar se uma tarefa t é uma tarefa pronta no bloco de determinação 502 e continuar com o método 500 como descrito com referência à figura 5.
[0075] Em resposta á determinação de que a política de conflito não é atendida (isto é, bloco de determinação 602 = “Não”), o dispositivo de computação pode substituir a borda de conflito de tarefa entre a tarefa t e tarefa tj com uma borda de dependência de tarefa dinâmica a partir da tarefa tj até a tarefa t no bloco 604. Como descrito com referência à figura 5, o dispositivo de computação pode manter estruturas de dados indicando as relações entre tarefas. Para substituir a borda de conflito de tarefa entre a tarefa t e a tarefa tj com uma borda de dependência de tarefa dinâmica a partir da tarefa tf para tarefa t, o dispositivo de computação pode criar ou atualizar uma entrada em uma ou mais estruturas de dados para indicar a remoção da borda de conflito de tarefa e a adição da borda de dependência de tarefa dinâmica. Em várias modalidades, entradas indicando várias relações e várias tarefas podem ser mantidas em uma ou múltiplas estruturas de dados. Em várias modalidades, pode não ser necessário remover ou editar o conflito de boda de tarefa visto que a entrada de borda de dependência de tarefa dinâmica pode simplesmente substituir outras entradas de relação.
[0076] No bloco 606, o dispositivo de computação pode alterar a tarefa a qual tj se refere, por exemplo, por definir a tarefa tj em tj+1. Como descrito aqui, a atribuição de bordas de dependência de tarefa dinâmica pode continuar até que uma política de conflito seja atendida ou até que não haja mais tarefas para estar em conflito com a tarefa t. Entretanto, desde que haja tarefas restantes e a política de conflito não seja atendida, a tarefa t pode ser comparada com uma tarefa nova. No bloco de determinação 504, o dispositivo de computação pode determinar se a tarefa t tem um conflito de tarefa com uma tarefa tj e continuar com o método 500 como descrito com referência à figura 5.
[0077] Em várias modalidades, pode ser importante assegurar que a tarefa tj não seja concluída no tempo entre a determinação de que a tarefa t não pode adquirir o recurso exigido para executar que é possuído pela tarefa em conflito tj e substituir a borda de conflito de tarefa com uma borda de dependência de tarefa dinâmica. Essa limitação pode ajudar a evitar que a tarefa t debilite esperando para ser sinalizado que o recurso está disponível porque o recurso se tornou disponível antes da borda de dependência de tarefa dinâmica ser adicionada. Portanto, a tarefa t não pode tentar adquirir o recurso até a próxima execução concluída da tarefa tj, ou alguma outra métrica como observado com referência á figura 6. Esse retardo pode também formar cascata com outras tarefas que são direta ou indiretamente dependentes da tarefa t. Os métodos descritos com referência às figuras 7 e 8 se referem a assegurar a atomicidade da propriedade da tarefa tj e a adição da borda de dependência de tarefa dinâmica a partir da tarefa tj para a atarefa t.
[0078] A figura 7 ilustra um método de modalidade 700 para substituir um conflito de tarefa com uma dependência de tarefa dinâmica. O método 700 pode ser implementado em um dispositivo de computação em software executando em um processador, em hardware de propósito geral ou hardware dedicado, e pode ser implementado como um programador de tarefa em qualquer tal configuração. Em várias modalidades, o método 700 pode ser implementado por múltiplos threads em múltiplos processadores ou componentes de hardware. Em várias modalidades, o método 700 pode ser implementado como parte do bloco 604, como descrito com referência à figura 6.
[0079] No bloco de determinação 702, o dispositivo de computação (por exemplo, um programador de tarefa executando em um dispositivo de computação) pode determinar se a execução de tarefa tj é concluída. Em várias modalidades, o dispositivo de computação pode receber um sinal a partir da tarefa tj ou o thread e/ou processador executando a tarefa tj que a execução é concluída. O sinal pode ser recebido pelo programador do dispositivo de computação. Em resposta à determinação de que a execução da tarefa tj não é concluída (isto é, bloco de determinação 702 = “Não”), o dispositivo de computação pode substituir a borda de conflito de tarefa com a borda de dependência de tarefa dinâmica a partir da tarefa tj para a tarefa t no bloco 704, como descrito no bloco 604 com referência à figura 6. Em resposta à determinação de que a execução da tarefa tj é concluída (isto é, bloco de determinação 702 = “Sim”) após substituir a boda de conflito de tarefa com a borda de dependência de tarefa dinâmica a partir da tarefa tj para a tarefa t no bloco 704, o dispositivo de computação pode alterar a tarefa à qual tj se refere no bloco 606 e prosseguir com o método 600 como descrito com referência à figura 6.
[0080] A figura 8 ilustra um método de modalidade 800 para substituir um conflito de tarefa com uma dependência de tarefa dinâmica. O método 800 pode ser implementado em um dispositivo de computação em software executando em um processador, em hardware de propósito geral, ou hardware dedicado, e pode ser implementado como um programador de tarefa em qualquer tal configuração. Em várias modalidades, o método 800 pode ser implementado por múltiplos threads em múltiplos processadores ou componentes de hardware. Em várias modalidades, o método 800 pode ser implementado como parte do bloco 604, como descrito com referência à figura 6.
[0081] No bloco 802, o dispositivo de computação (por exemplo, um programador de tarefa executando no dispositivo de computação) pode bloquear a tarefa tj. Em várias modalidades, o dispositivo de computação pode bloquear a tarefa tj por interromper a execução da tarefa tj com um sinal de interrupção ou comando para o thread e/ou processadores atribuídos para executar a tarefa tj, desse modo pausando a execução da tarefa tj. Em várias modalidades, o dispositivo de computação pode bloquear a tarefa tj por adquirir acesso exclusivo a, ou de outro modo evitar que a tarefa tj acesse um ou mais recursos exigidos pela tarefa tj para execução, similarmente pausando a execução da tarefa tj.
[0082] No bloco 804, o dispositivo de computação pode substituir a borda de conflito de tarefa com a borda de dependência de tarefa dinâmica a partir da tarefa tj para a tarefa t similar às operações no bloco 604 do método 600 descrito com referência à figura 6.
[0083] No bloco 806, o dispositivo de computação pode desbloquear a tarefa tj. Em várias modalidades, o dispositivo de computação pode desbloquear a tarefa tj por reiniciar a execução da tarefa tj com um sinal ou comando de reiniciar para o thread e/ou processadores atribuídos para executar a tarefa tj, desse modo não pausando a execução da tarefa tj. Em várias modalidades, o dispositivo de computação pode desbloquear a tarefa tj por abandonar acesso exclusivo a, ou de outro modo permitir que a tarefa tj acesse um ou mais recursos exigidos pela tarefa tj para execução, similarmente não pausando a execução da tarefa tj. O dispositivo de computação pode então alterar a tarefa à qual tj se refere no bloco 606 e prosseguir com o método 600 como descrito com referência à figura 6.
[0084] As várias modalidades (incluindo, porém, não limitado a modalidades discutidas acima com referência às figuras 1-8) podem ser implementadas em uma ampla variedade de sistemas de computação, que podem incluir dispositivo de computação móvel adequado para uso com as várias modalidades ilustradas na figura 9. O dispositivo de computação móvel 900 pode incluir um processador 902 acoplado a um controlador de tela de toque 904 e uma memória interna 906. O processador 902 pode ser um ou mais circuitos integrados de múltiplos núcleos designados para tarefas de processamento geral ou específico. A memória interna 906 pode ser memória volátil ou não volátil e pode também ser memória segura e/ou criptografada, ou memória não segura e/ou não criptografada, ou qualquer combinação das mesmas. Os exemplos de tipos de memória que podem ser influenciados incluem, porém não são limitados a DDR, LPDDR, GDDR, WIDEIO, RAM, SRAM, DDRAM, P-RAM, R-RAM, M-RAM, STT-RAM e DRAM incorporada. O controlador de tela de toque 904 e o processador 902 podem ser também acoplados a um painel de tela de toque 912, como uma tela de toque de detecção resistiva, tela de toque de detecção capacitiva, tela de toque de detecção infravermelha, etc. Adicionalmente, o display do dispositivo de computação 900 não necessita ter capacidade de tela de toque.
[0085] O dispositivo de computação móvel 900 pode ter um ou mais transceptores de sinal de rádio 908 (por exemplo, Peanut, Bluetooth, Zigbee, Wi-Fi, rádio RF) e antenas 910, para enviar e receber comunicação, acoplados entre si e/ou ao processador 902. Os transceptores 908 e antenas 910 podem ser usados com o conjunto de circuitos acima mencionado para implementar as várias pilhas de protocolo de transmissão sem fio e interfaces. O dispositivo de computação móvel 900 pode incluir um chip de modem sem fio de rede celular 916 que permite comunicação através de uma rede celular e é acoplado ao processador.
[0086] O dispositivo de computação móvel 900 pode incluir uma interface de conexão de dispositivo periférico 918 acoplado ao processador 902. A interface de conexão de dispositivo periférico 918 pode ser singularmente configurada para aceitar um tipo de conexão, ou pode ser configurada para aceitar vários tipos de conexões de comunicação e física, comuns ou de propriedade, como USB, FireWire, Thunderbolt ou PCIe. A interface de conexão de dispositivo periférico 918 pode ser também acoplada a uma porta de conexão de dispositivo periférico similarmente configurada (não mostrada).
[0087] O dispositivo de computação móvel 900 pode incluir também alto-falantes 914 para fornecer saídas de áudio. O dispositivo de computação móvel 900 pode incluir também um alojamento 920, construído de um plástico, metal ou uma combinação de materiais, para conter todos ou alguns dos componentes discutidos aqui. O dispositivo de computação móvel 900 pode incluir uma fonte de energia 922 acoplada ao processador 902, como uma bateria descartável ou recarregável. A bateria recarregável pode ser também acoplada à porta de conexão de dispositivo periférico para receber uma corrente de carga a partir de uma fonte externa ao dispositivo de computação móvel 900. O dispositivo de computação móvel 900 pode incluir também um botão físico 924 para receber entradas de usuário. O dispositivo de computação móvel 900 pode incluir também um botão de energia 926 para ligar e desligar o dispositivo de computação móvel 900.
[0088] As várias modalidades (incluindo, porém, não limitado a modalidades discutidas acima com referência às figuras 1-8) podem ser implementadas em uma ampla variedade de sistemas de computação, que podem incluir uma variedade de dispositivos de computação móveis, como um computador laptop 1000 ilustrado na figura 10. Muitos computadores laptop incluem uma superfície de toque de touchpad 1017 que serve como o dispositivo de indicação do computador, e desse modo podem receber gestos de arrastar, rolar e movimentar similares àqueles implementados em dispositivos de computação equipados com um display de tela de toque e descrito acima. Um computador de laptop 1000 incluirá tipicamente um processador 1011 acoplado à memória volátil 1012 e uma memória não volátil de capacidade grande, como uma unidade de disco 1013 de memória flash. Adicionalmente, o computador 1000 pode ter uma ou mais antenas 1008 para enviar e receber radiação eletromagnética que pode ser conectada a um link de dados sem fio e/ou transceptor de telefone celular 1016 acoplado ao processador 1011. O computador 1000 pode incluir também uma unidade de disco flexível 1014 e uma unidade de compact disc (CD) 1015 acoplada ao processador 1011. Em uma configuração de notebook, o alojamento de computador inclui o touchpad 1017, o teclado 1018 e o display 1019 todos acoplados ao processador 1011. Outras configurações do dispositivo de computação podem incluir um mouse de computador ou trackball acoplado ao processador (por exemplo, através de uma entrada de USB) como são bem conhecidos, que podem ser também usados em combinação com as várias modalidades.
[0089] As várias modalidades (incluindo, porém, não limitado a modalidades discutidas acima com referência às figuras 1-8) podem ser implementadas em uma ampla variedade de sistemas de computação que podem incluir qualquer de uma variedade de servidores comercialmente disponíveis para comprimir dados em memória cache de servidor. Um servidor de exemplo 1100 é ilustrado na figura 11. Tal servidor 1100 inclui tipicamente um ou mais conjuntos de processador de múltiplos núcleos 1101 acoplados á memória volátil 1102 e uma memória não volátil de capacidade grande, como uma unidade de disco 1104. Como ilustrado na figura 11, conjuntos de processador de múltiplos núcleos 1101 podem ser adicionados ao servidor 1100 por inserir os mesmos nas racks do conjunto. O servidor 1100 pode incluir também uma unidade de disco flexível, unidade de compact disc (CD) ou digital versatile disc (DVD) 1106 acoplado ao processador 1101. O servidor 1100 pode incluir também portas de acesso de rede 1103 acopladas aos conjuntos de processador de múltiplos núcleos 1101 para estabelecer conexões de interface de rede com uma rede 1105, como uma rede de área local acoplada a outros computadores de sistema de broadcast e servidores, Internet, rede de telefonia comutada pública, e/ou uma rede de dados celulares (por exemplo, CDMA, TDMA, GSM, PCS, 3G, 4G, LTE ou qualquer outro tipo de rede de dados celulares).
[0090] Código de programa de computador ou “código de programa” para execução em um processador programável para realizar operações das várias modalidades pode ser gravado em uma linguagem de programação de alto nível como C, C++, C#, Smalltalk, Java, JavaScript, Visual Basic, uma linguagem de Consulta estruturada (por exemplo, Transact-sql), Perl, ou em várias outras linguagens de programação. Código de programa ou programas armazenados em uma mídia de armazenagem legível em computador como usado nesse pedido podem se referir a código de linguagem de máquina (como código de objeto) cujo formato é compreensível por um processador.
[0091] As descrições de método acima e os fluxogramas de processo são fornecidas meramente como exemplos ilustrativos e não pretendem exigir ou sugerir que as operações das várias modalidades devam ser executadas na ordem apresentada. Como será reconhecido por uma pessoa com conhecimentos na técnica a ordem de operações nas modalidades acima pode ser executada em qualquer ordem. Palavras como “posteriormente,” “então”, “seguinte”, etc. não pretendem limitar a ordem das operações; essas palavras são simplesmente usadas para guiar o leitor através da descrição dos métodos. Além disso, qualquer referência a elementos de reivindicação no singular, por exemplo, usando os artigos “um”, “uma” ou “o, a” não deve ser interpretada como limitando o elemento ao singular.
[0092] Os vários blocos lógicos ilustrativos, módulos, circuitos e operações de algoritmo descritas com relação às várias modalidades podem ser implementados como hardware eletrônico, software de computador ou combinações de ambos. Para ilustrar claramente essa capacidade de troca de hardware e software, vários componentes ilustrativos, blocos, módulos, circuitos e operações foram descritos acima em geral em termos de sua funcionalidade. O fato de se tal funcionalidade é implementada como hardware ou software depende das limitações de design e aplicação específica impostas sobre o sistema geral. Técnicos especializados podem implementar a funcionalidade descrita em modos variáveis para cada aplicação específica, porém tais decisões de implementação não devem ser interpretadas como causando afastando do escopo das reivindicações.
[0093] O hardware usado para implementar as várias lógicas ilustrativas, blocos lógicos, módulos e circuitos descritos com relação às modalidades reveladas aqui pode ser implementado ou executado com um processador de propósito geral, um processador de sinais digitais (DSP), um circuito integrado de aplicação específica (ASIC), uma disposição de porta programável em campo (FPGA) ou outro dispositivo de lógica programável, porta discreta ou lógica de transistor, componentes de hardware discreto, ou qualquer combinação dos mesmos projetada para executar as funções descritas aqui. Um processador de propósito geral pode ser um microprocessador, porém, na alternativa, o processador pode ser qualquer processador, controlador, microcontrolador ou máquina de estado convencional. Um processador também pode ser implementado como uma combinação de dispositivos de computação, por exemplo, uma combinação de um DSP e um microprocessador, uma pluralidade de microprocessadores, um ou mais microprocessadores em combinação com um núcleo DSP ou qualquer outra tal configuração. Alternativamente, algumas operações ou métodos podem ser executadas pelo conjunto de circuitos que é específico a uma função dada.
[0094] Em uma ou mais modalidades, as funções descritas podem ser implementadas em hardware, software, firmware ou qualquer combinação dos mesmos. Se implementadas em software, as funções podem ser armazenadas como uma ou mais instruções ou código em uma mídia legível em computador não transitória ou uma mídia legível em processador não transitória. As operações de um método ou algoritmo revelado aqui podem ser incorporadas em um módulo de software executável por processador que pode residir em uma mídia de armazenagem legível em processador ou legível em computador não transitória. Mídia de armazenagem legível em processador ou legível em computador não transitória pode ser qualquer mídia de armazenagem que pode ser acessada por um computador ou um processador. Como exemplo, porém não limitação, tal mídia legível em processador ou legível em computador pode incluir RAM, ROM, EEPROM, memória FLASH, CD-ROM ou outra armazenagem de disco ótico, armazenagem de disco magnético ou outros dispositivos de armazenagem magnética, ou qualquer outra mídia que pode ser usada para armazenar código de programa desejado na forma de instruções ou estruturas de dados e que pode ser acessado por um computador. Disco e disc, como usados aqui, incluem compact disc (CD), disco laser, disco ótico, digital versatile disc (DVD), disco flexível e disco Blu- ray onde discos normalmente reproduzem dados magneticamente, enquanto discs reproduzem dados oticamente com lasers. Combinações do acima são incluídas no escopo de mídia legível em computador e mídia legível em processador não transitória. Adicionalmente, as operações de um método ou algoritmo podem residir como uma ou qualquer combinação ou conjunto de códigos e/ou instruções em uma mídia legível em processador e/ou mídia legível em computador não transitória, que pode ser incorporada em um produto de programa de computador.
[0095] A descrição anterior das modalidades reveladas é fornecida para permitir que qualquer pessoa versada na técnica faça ou use as reivindicações. Várias modificações nessas modalidades serão prontamente evidentes para aqueles versados na técnica, e os princípios genéricos definidos aqui podem ser aplicados a outras modalidades sem se afastar do escopo das reivindicações. Desse modo, a presente revelação não pretende ser limitada às modalidades mostradas aqui, porém deve ser acordada o escopo mais amplo compatível com as reivindicações a seguir e os princípios e características novas reveladas aqui.

Claims (14)

1. Método de programação de tarefa na presença de bordas de conflito de tarefa em um dispositivo de computação, em que uma borda de conflito de tarefa especifica que ou uma primeira tarefa precisa acabar antes de uma segunda tarefa iniciar a execução ou a segunda tarefa precisa acabar antes da primeira tarefa iniciar a execução, e a execução da primeira tarefa e da segunda tarefa não se sobrepõem, o método caracterizado pelo fato de que compreende: determinar (504) se a primeira tarefa e a segunda tarefa são relacionadas por uma borda de conflito de tarefa; determinar (508) se a segunda tarefa adquire um recurso exigido para execução da primeira tarefa e da segunda tarefa em resposta à determinação de que a primeira tarefa e segunda tarefa são relacionadas pela borda de conflito de tarefa; e atribuir (510) uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso, em que atribuir (510) uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso compreende: determinar se uma execução da primeira tarefa está completa; e atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a execução da primeira tarefa não está completa.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso compreende: bloquear a primeira tarefa; atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa após bloqueio da primeira tarefa; e desbloquear a primeira tarefa.
3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que atribuir de uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa compreende: remover um indicador da borda de conflito de tarefa a partir de uma estrutura de dados; e adicionar um indicador da borda de dependência de tarefa dinâmica à estrutura de dados.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: adquirir o recurso pela primeira tarefa, em que um deadlock e uma dependência de tarefa dinâmica cíclica são evitados por exigir que o recurso seja processado em uma ordem relacionada a pelo menos um outro recurso exigido para execução da segunda tarefa ou uma terceira tarefa; sinalizar um núcleo de processador atribuído para executar a segunda tarefa para entrar em um estado inativo em resposta à atribuição da borda de dependência de tarefa dinâmica a partir da primeira tarefa à segunda tarefa; receber um sinal que a primeira tarefa está completa; e sinalizar o núcleo de processador atribuído para executar a segunda tarefa para ativar a partir do estado inativo.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende adicionalmente: determinar (602) se uma política de conflito é atendida, em que atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa compreende atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso e em resposta à determinação de que a política de conflito não é atendida; e determinar se a segunda tarefa é uma tarefa pronta em resposta à determinação de que a política de conflito é atendida.
6. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que determinar se a política de conflito é atendida compreende adicionalmente determinar se uma quantidade limiar de bordas de dependência de tarefa dinâmica é atribuída à segunda tarefa em uma sessão de atribuição.
7. Método, de acordo com a reivindicação 5, caracterizado pelo fato de que a política de conflito compreende uma quantidade limiar de bordas de dependência de tarefa dinâmica atribuídas à segunda tarefa em uma sessão de atribuição e em que a quantidade limiar de bordas de dependência de tarefa dinâmica é determinada com base pelo menos em um dentre consumo de energia para tarefas de execução, latência de execução de tarefa e criticidade da segunda tarefa.
8. Dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa, em que uma borda de conflito de tarefa especifica que ou uma primeira tarefa precisa acabar antes de uma segunda tarefa iniciar a execução ou a segunda tarefa precisa acabar antes da primeira tarefa iniciar a execução, e a execução da primeira tarefa e da segunda tarefa não se sobrepõem, o dispositivo de computação caracterizado pelo fato de que compreende: meios para determinar (504) se a primeira tarefa e a segunda tarefa são relacionadas por uma borda de conflito de tarefa; meios para determinar (508) se a segunda tarefa adquire um recurso exigido para execução da primeira tarefa e da segunda tarefa em resposta à determinação de que a primeira tarefa e segunda tarefa são relacionadas pela borda de conflito de tarefa; e meios para atribuir (510) uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso, em que os meios para atribuir (510) uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso compreendem: meios para determinar se uma execução da primeira tarefa está completa; e meios para atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a execução da primeira tarefa não está completa.
9. Dispositivo de computação, de acordo com a reivindicação 8, caracterizado pelo fato de que os meios para atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso compreendem: meios para bloquear a primeira tarefa; meios para atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa após bloqueio da primeira tarefa; e meios para desbloquear a primeira tarefa.
10. Dispositivo de computação, de acordo com a reivindicação 8, caracterizado pelo fato de que os meios para atribuir uma borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa compreendem: meios para remover um indicador da borda de conflito de tarefa a partir de uma estrutura de dados; e meios para adicionar um indicador da borda de dependência de tarefa dinâmica à estrutura de dados.
11. Dispositivo de computação, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende adicionalmente: meios para adquirir o recurso pela primeira tarefa, em que um deadlock e uma dependência de tarefa dinâmica cíclica são evitados por exigir que o recurso seja processado em uma ordem relacionada a pelo menos um outro recurso exigido para execução da segunda tarefa ou de uma terceira tarefa; meios para sinalizar um núcleo de processador atribuído para executar a segunda tarefa para entrar em um estado inativo em resposta à atribuição da borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa; meios para receber um sinal que a primeira tarefa está completa; e meios para sinalizar o núcleo de processador atribuído para executar a segunda tarefa para ativar a partir do estado inativo.
12. Dispositivo de computação, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende adicionalmente: meios para determinar se uma política de conflito é atendida, em que os meios para atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa compreendem meios para atribuir a borda de dependência de tarefa dinâmica a partir da primeira tarefa para a segunda tarefa em resposta à determinação de que a segunda tarefa falha em adquirir o recurso e em resposta à determinação de que a política de conflito não é atendida; e meios para determinar se a segunda tarefa é uma tarefa pronta em resposta à determinação de que a política de conflito é atendida.
13. Dispositivo de computação, de acordo com a reivindicação 12, caracterizado pelo fato de que meios para determinar (602) se a política de conflito é atendida compreendem adicionalmente meios para determinar se uma quantidade limiar de bordas de dependência de tarefa dinâmica é atribuída à segunda tarefa em uma sessão de atribuição, em que a política de conflito compreende a quantidade limiar de bordas de dependência de tarefa dinâmica atribuídas à segunda tarefa em uma sessão de atribuição e em que a quantidade limiar de bordas de dependência de tarefa dinâmica é determinada com base pelo menos em um dentre consumo de energia para tarefas de execução, latência de execução de tarefa e criticidade da segunda tarefa.
14. Memória legível por computador caracterizada pelo fato de que compreende instruções armazenadas na mesma, as instruções sendo executáveis por um computador para realizar as etapas de método conforme definido em qualquer uma das reivindicações 1 a 7.
BR112018007623-6A 2015-10-16 2016-09-14 Método e dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa e memória legível por computador BR112018007623B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/884,979 2015-10-16
US14/884,979 US10977092B2 (en) 2015-10-16 2015-10-16 Method for efficient task scheduling in the presence of conflicts
PCT/US2016/051708 WO2017065913A1 (en) 2015-10-16 2016-09-14 Method for efficient task scheduling in the presence of conflicts

Publications (2)

Publication Number Publication Date
BR112018007623A2 BR112018007623A2 (pt) 2018-10-30
BR112018007623B1 true BR112018007623B1 (pt) 2024-06-25

Family

ID=

Similar Documents

Publication Publication Date Title
EP3362898B1 (en) Method for efficient task scheduling in the presence of conflicts
JP2018534676A5 (pt)
US9632569B2 (en) Directed event signaling for multiprocessor systems
US8881153B2 (en) Speculative thread execution with hardware transactional memory
US9996402B2 (en) System and method for implementing scalable adaptive reader-writer locks
US10095305B2 (en) Wake lock aware system wide job scheduling for energy efficiency on mobile devices
US20170031728A1 (en) Method For Simplified Task-based Runtime For Efficient Parallel Computing
WO2019052576A1 (zh) 一种基于同步锁的多线程处理方法、终端以及存储介质
US10114681B2 (en) Identifying enhanced synchronization operation outcomes to improve runtime operations
WO2017222746A1 (en) Iteration synchronization construct for parallel pipelines
US9778951B2 (en) Task signaling off a critical path of execution
BR112018007623B1 (pt) Método e dispositivo de computação configurado para programação de tarefa na presença de bordas de conflito de tarefa e memória legível por computador
Quislant et al. Leveraging irrevocability to deal with signature saturation in hardware transactional memory
US10261831B2 (en) Speculative loop iteration partitioning for heterogeneous execution
Quislant-del-Barrio et al. Leveraging Irrevocability to Deal with Signature Saturation in Hardware Transactional Memory